微前端就是将不同的功能按照不同的维度拆分成多个子应用,通过主应用来加载这些子应用
微前端的核心在于拆,拆完后再合
- 不同团队间开发同一个应用技术栈不同怎么办?
- 希望每个团队都可以独立开发,独立部署怎么办?
- 项目中还需要老的应用代码怎么办?
我们是不是可以将一个应用划分成若干个子应用,将子应用打包成一个个的 lib,当路径切换时加载不同的子应用。这样每个子应用都是独立的,技术栈也不用做限制了,从而解决了前端协同开发的问题
- 实现了路由劫持和应用加载
- 没有处理样式隔离,js执行隔离
基于single-spa,提供了更加开箱即用的api(single-spa + sandbox + import-html-entry),做到了与技术栈无关,并且接入简单(像iframe一样简单)
总结:子应用可以独立构建,运行时动态加载,主子应用完全解耦,技术栈无关,靠的是协议接入(子应用必须导出bootstrap、mount、unmount方法)
- 基于URL来进行数据传递,但是传递消息能力弱
- 基于
CustomEvent
实现通信 - 基于
props
主子应用间通信 - 使用全局变量、redux进行通信
- CDN - externals
- webpack5 模块联邦
- Proxy
- 快照沙箱?