一、微前端方案思路
在前端技术领域已有如下几种成熟的实现微前端的思想:
- 基于接口协议:子应用按照协议导出几个接口,主应用在运行过程中调用子应用导出的这几个接口
- 基于沙箱隔离:主应用创建一个隔离环境,让子应用基本不用考虑自己是在什么环境下运营,按照普通的开发思路进行开发即可
- 基于模块协议:主应用把子应用当作一个模块,和模块的使用方式无异
二、微前端实现的几种方式
在前端技术领域已有如下几种方式落地实施:
- 路由分发:开发成本低,维护成本低,可行性高,不限技术栈,实现简单
- iFrame:开发成本低,维护成本低,可行性高,不限技术栈,实现简单
- 应用微服务化:开发成本高,维护成本低,可行性中等,不限技术栈,实现难
- 微件化:开发成本中等,维护成本中等,可行性低,有技术栈限制,实现难
- 微应用化:开发成本中等,维护成本中等,可行性高,有技术栈限制,实现较难
- 纯 Web Components:开发成本高,维护成本低,可行性高,不限技术栈,实现简单
- 结合 Web Components:开发成本高,维护成本低,可行性高,不限技术栈,实现简单
三、17个实现微前端的框架简介
1. Single-Spa:最早的前端微服务 Javascript 框架,兼容多种前端技术栈
- 基于Single-Spa,阿里系开源微前端框架,
- 是一个将多个单页面应用聚合为一个整体应用的 JavaScript 微前端框架,
- 在同一页面上使用多个前端框架,而不用刷新页面,
- 不限技术栈,
- 支持独立部署每一个单页面应用,
- 新功能使用新框架,旧的单页应用不用重写可以共存,
- 有效改善初始加载时间,延迟加载代码,
- 文档地址:https://zh-hans.single-spa.js...
2. Qiankun:基于Single-Spa,阿里系开源微前端框架
- 阿里飞冰微前端框架,兼容多种前端技术栈,
- 基于 single-spa 封装,提供了更加开箱即用的 API,
- 不限技术栈,
- HTML Entry 接入方式,让你接入微应用像使用 iframe 一样简单,
- 样式隔离,确保微应用之间样式互相不干扰,
- JS 沙箱,确保微应用之间全局变量/事件不冲突,
- 资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度,
- umi 插件,提供了 @umijs/plugin-qiankun 供 umi 应用一键切换成微前端架构系统,
- 文档地址:https://qiankun.umijs.org/zh/...
3. Icestark:阿里飞冰微前端框架
4. Alibaba Cloud Alfa 是在阿里云控制台体系中孵化的微前端方案,定位是面向企业级的微前端体系化解决方案
5. Module Federation:是 Zack Jackson 发明的 JavaScript 架构,Zack Jackson 随后提出为其创建一个 Webpack 插件。
- 是webpack给出的微前端方案,
- 使 JavaScript 应用可以动态运行另一个 JavaScript 应用中的代码,同时可以共享依赖,
- 依赖自动管理,可以共享 Host 中的依赖,版本不满足要求时自动 fallback 到 Remote 中依赖,
- 共享模块粒度自由掌控,小到一个单独组件,大到一个完整应用。既实现了组件级别的复用,又实现了微服务的基本功能,
- 共享模块非常灵活,模块中所有组件都可以通过异步加载调用,
- 文档地址:https://webpack.js.org/concep...
6. FrintJS:用于构建可伸缩和响应式应用程序的模块化 JavaScript 框架
- 加载来自不同 bundlers 的应用程序,为应用程序提供结构,并处理诸如路由、依赖关系等问题,
- 通过附加的软件包支持 RN 和 Vue,但文档和测试大多数是针对 React 的,
- 文档地址:https://frint.js.org/
7. Bit:将独立的组件构建、集成和组合到一起和管理前端
8. PuzzleJS:用于可扩展和快速建站的微前端框架
9. Mooa:基于Angular的微前端服务框架
10. ngx-planet:一个强大、可靠、完善、完全可用于生产环境的 Angular 微前端库
- 只支持 Angular 框架,不支持其他 MV* 前端框架,
- 支持同时渲染多个子应用,
- 支持并存(coexist)和默认(default)两种模式, 默认模式切换其他子应用销毁当前子应用,并存模式不会销毁,而是隐藏,
- 支持子应用的预加载,
- 支持样式隔离,
- 内置多个应用之间的通信,
- 支持跨应用组件的渲染,
- 完善的示例,包含路由配置、懒加载等所有功能,
- 文档地址:https://github.com/worktile/n...
11. Ara Framework:Ara 是一个使用Airbnb 的 Hypernova轻松开发和集成微前端的框架
12. Micro-app:是京东零售推出的基于类WebComponent进行渲染,从组件化的思维实现的微前端技术
13. Piral:基于 React 的微前端,目标是让你可以使用微前端轻松构建门户应用程序
14. OpenComponent:目标是“前端世界中的无服务器”,旨在成为一个一站式微前端框架,从而使其成为一个丰富而复杂的系统,其中包括从组件处理到注册表、再到模板、甚至包括 CLI 工具
15. Liugi:是一个微前端 JavaScript 框架,你可以使用它创建由本地和分布式视图驱动的管理用户界面
16. Mosaic:是一组服务,库以及规范定义了其组件之间如何彼此交互,用来支持大型网站的微服务式架构
- 使用了片段(Fragments)的机制,这些片段由单独的服务程序提供服务,并根据模板定义在运行时组合在一起,
- 由一堆软件包组成,这些软件包处理不同的问题,例如路由、布局、模板存储、甚至展示 UI,
- 文档地址:https://www.mosaic9.org/
17. SystemJS:不是微前端框架,但它确实为跨浏览器的独立模块管理提供了解决方案
四、选择微前端方案的时候需要考虑能否解决好以下10个问题
- 微应用的注册、异步加载和生命周期管理;
- 微应用之间、主从之间的消息机制;
- 微应用之间的安全隔离措施;
- 微应用的框架无关、版本无关;
- 微应用之间、主从之间的公共依赖的库、业务逻辑(utils)以及版本怎么管理;
- 微应用独立调试、和主应用联调的方式,快速定位报错(发射问题);
- 微应用的发布流程;
- 微应用打包优化问题;
- 微应用专有云场景的出包方案;
- 渐进式升级:用微应用方案平滑重构老项目。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。