概念
-
微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用用由单一的单体应用转变为把多个小型前端应用聚合为一的应用。各个前端应用还可以独立开发、独立部署。同时,它们也可以进行并行开发。——《前端架构:从入门到微前端》
-
微前端背后的想法是将网站或Web应用视为独立团队拥有的功能组合。每个团队都有一个独特的业务或任务领域,做他们关注和专注的事情。团队是跨职能的,从数据库到用户界面开发端到端的功能。——译,micro-frontends.org
-
微前端的核心价值在于 “技术栈无关”,这才是它诞生的理由,或者说这才是能说服我采用微前端方案的理由。——kuitos, qiankun作者,2020.11.20晚阿里云微前端线下沙龙
-
真正要解决的是,当技术更新换代时,应用可兼容不同代际的应用。
微前端框架对比评测
-
Mooa:基于Angular的微前端服务框架 https://github.com/phodal/mooa
-
Single-Spa:最早的微前端框架,兼容多种前端技术栈。https://single-spa.js.org/
-
Qiankun:基于Single-Spa,阿里系开源微前端框架。https://github.com/umijs/qiankun
-
Icestark:阿里飞冰微前端框架,兼容多种前端技术栈 https://github.com/ice-lab/icestark
-
console-os 是在阿里云控制台体系中孵化的微前端方案, 定位是面向企业级的微前端体系化解决方案。https://github.com/aliyun/alibabacloud-console-os
-
Module Federation:webpack给出的微前端方案https://webpack.js.org/concepts/module-federation/
-
Luigi:一套复杂的分布式前端应用解决方案 https://github.com/SAP/luigi
-
FrintJS:自主解决依赖的微前端框架 https://github.com/frintjs/frint
-
PuzzleJS:一套复杂的前后端编译时相结合的微前端解决方案 https://github.com/puzzle-js/puzzle-js
-
ngx-planet:基于angular的微前端框架 https://github.com/worktile/ngx-planet
-
麦饭(mfy):精巧简易的微前端框架 http://npmjs.com/package/mfy
微前端核心技术
环境隔离
-
iframe:样式和脚本运行的隔离,缺点在于无法全屏弹出层
-
ShadowDOM:样式隔离,缺点在于弹出层被挂在document.body下面,而样式被放在ShadowDOM内部,无法正确渲染弹出层
-
快照沙箱
-
代理沙箱
快照沙箱
代理沙箱
创建代理对象
创建运行沙箱
解析资源
预加载/懒加载
路由映射
挂载
-
可以放在 v-if 内部,DOM节点被移除后挂回来,子应用还在
-
动画效果
-
keepAlive
通信/应用树
scope
connectScope
状态共享
思考
-
跨域加载子应用问题
-
子应用自己还要加载资源(angularjs模板)绝对路径问题
-
登录态怎么传递?
-
多语言怎么配置?
-
代码共享(依赖)怎么处理?
-
运行时对象多个怎么办?(例如每个子应用都有自己的jQuery)
-
跨应用加载相同资源怎么办?(例如同时请求一个api拉取数据)
小结
-
微前端是一种架构形式,一旦采用这种架构,就会影响到你的应用的运行方式、团队的管理方式、构建部署的方式,因此,开发团队最好经过比较长一段时间的调研之后,才决定启用这种架构
-
从我的分享中,你也会发现,要实现微前端框架的核心能力,需要使用一些看上去不那么优雅的hack方法,既然是hack方法,就存在一定的弊端,比较容易跳坑
-
这次分享只介绍了实现微前端框架的核心技术点,在实际项目中,还需要面临更多问题,但这并不是说我在劝退大家,而是希望大家在选择时,根据实际的需求决定,不要由于这个很火就上
本篇文章来源于微信公众号: 腾讯CDC体验设计