JavaScript - 微前端
微前端
概念
微前端是一种类似于微服务的架构,将微服务的理念应用于浏览器端,将web应用由单一的单体应用转变为多个小型前端应用聚合为一的应用,各个前端应用独立运行、独立开发、独立部署。
当前前端应用通常以spa的形态(一个应用所有的相关页面都在一个项目)出现。随着项目迭代,维护成本越来越高。微前端的意义在于 拆分项目:细化为若干个可以单独部署的子项目,子项目互相独立,单独部署
微前端结构下,不同技术栈的子项目可以共存
可以低成本整合已有项目。因为子项目是独立的,不需要太大的工作量就可迁至新项目
qiankun(乾坤)
qiankun
是一个基于single-spa
的微前端库(二次开发)single-spa
:是一个用于微服务化的js前端解决方案- 将子应用看作一个spa的页面,主应用通过路由匹配的方式,加载不同的子应用,子应用会经过下载(loaded)、初始化(initialized)、被挂载(unmounted)、被移除(unloaded)等过程
主应用
- 安装
1 | `yarn add qiankun` // `npm i qiankun -S` |
- 注册微应用
1 | import {registerMicroApps, start} from 'qiankun' |
微应用
- 导出对应的生命周期钩子(通常是配置的webpack 的 entry)
1 | /* bootstrap |
配置微应用的打包工具
- 为了让主应用能正确识别微应用暴露出来的一些信息
1 | const packageName = require('./package.json').name |
通信
- 官方提供
Actions
通信:适合业务划分清晰,通信较少的微前端应用场景- 内部提供了
initGlobalState
方法用于注册MicroAppStateActions
实现用于通信,该实例有三个方法 setGlobalState
设置globalState
onGlobalStateChange
:注册观察者
函数,响应globalState
变化,在globalState
发生改变时触发该观察者函数offGlobalStateChange
: 取消观察者
函数, 该实例不再响应globalState
变化
- 内部提供了
1 | // 主应用 |
localStorage、sessionStorage
实现:适合跟踪通信状态,类似用户登陆信息