简介
qiankun 是一个基于single-spa的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用的微前端架构系统。
关键词
HTML Entry接入方式:微应用的形态是HTML,接入主应用即是以HTML的方式接入;- 样式隔离:基于
shadow DOM的严格样式隔离和修改css选择器的实验版样式隔离; - JS沙箱:基于当前微应用使用
window.Proxy对window对象做处理并代理;对于不支持window.Proxy的场景使用widnow对象快照; - 资源预加载:通过
start()的opts.prefetch可配置预加载策略及应用,通过prefetchApps()来配置使用立即排队预加载的微应用,默认预加载策略是使用window.requestIdleCallback()或setTimeout(fn, 1); - 应用间通信:主要通过
URL及CustomEvent来处理,在一些简单场景下可基于props的方案会更直接便捷;
主要实现
主应用安装qiankun后使用registerMicroApps()注册微应用,然后主应用启动qiankun,主应用也可使用loadMicroApp()来手动加载微应用;微应用在自己的入口处导出bootstrap、mount、umount、update、unload等钩子函数,供主应用在特定时机调用;- 当
主应用发起导航时,qiankun会根据配置的activeRule来匹配微应用,对于第一次装载的微应用,主应用会首先调用其load逻辑(微应用中入口非钩子的部分),此时qiankun会创建微应用的JS沙箱、生成容器DOM等等(使用了single-spa registerApplication()注册应用),然后执行bootstrap、mount钩子函数分别进行初始化和安装,在安装时会创建DOM、实现样式隔离、DOM事件监听、放置DOM到container中等等; - 当
URL再次发起导航时,qiankun会重新使用activeRule来匹配应用,当重新匹配到该微应用时会跳过bootstrap钩子函数,只需要初始化一次即可;
特性
- 基于
single-spa封装,提供了更加开箱即用的API; - 技术栈无关,任意技术栈的应用均可使用/接入,不论是
react/vue/angular/jquery还是其他框架; HTML Entry接入方式,让你接入微应用就像使用iframe一样简单;- 样式隔离,确保微应用之间样式互不干扰;
JS沙箱,确保微应用之间全局变量/事件 不冲突;- 资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度;
- umi插件,提供了
@umijs/plugin-qiankun供umi应用一键切换成微前端架构系统;
用法
- 请参考官方教程;