解决痛点
- 兼容多个技术栈
- 子应用可以独立构建,运行时动态加载,主应用完全解耦,靠协议接入(子应用必须导出bootstrap\mount\unmount方法)
iframe
- 存在的问题
- 刷新页面状态重置
- 通信
- url传参 2.原生Api CustomEvent实现通信 3.基于props主子应用间通信 4.使用全局变量、Redux进行通信
single-spa
- 缺点:
- 未进行样式隔离、js隔离
- 不够灵活,不能动态加载js文件
- 主应用和子应用之间样式隔离
- BEM 约定项目前缀
- css-Modules 打包时生成不冲突的选择器名(样式后生成字符串)
- Shadow Dom 真正意义上的隔离(微信小程序有shadow样式)
- css-in-js
- js沙箱隔离(应用的运行,切换前后不会改变全局) 1年前拍一张 在拍一张 将区别保存下来 在回到一年前 多个子应用使用es6的proxy
- SystemJS 模块加载器
先加载systemjs-import再加载System.import
- 手写system模块
- single-spa源码 包含的过程状态
registerApplication方法
reroute方法
获取getAppChanges返回的数据
1.对需要加载的列表进行加载,执行对应的方法
2.对需要挂载的列表进行挂载,执行对应的方法 钩子函数内部只能用promise
reroute方法在启动和挂载都需要执行,统一用状态status控制执行的逻辑
qiankun
基于single-spa,默认动态加载子应用js,但是子应用必须解决跨域 qiankun是把子应用所有的模块请求下来,而不是iframe模式
EMP
module Federation,接入成本低,依靠webpack联邦模块的特性