认识qiankun 微前端

237 阅读2分钟

简介

qiankun 是一个基于single-spa的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用的微前端架构系统。

关键词

  • HTML Entry 接入方式:微应用的形态是HTML,接入主应用即是以HTML的方式接入;
  • 样式隔离:基于shadow DOM严格样式隔离修改css选择器实验版样式隔离
  • JS沙箱:基于当前微应用使用window.Proxywindow对象做处理并代理;对于不支持window.Proxy的场景使用widnow对象快照
  • 资源预加载:通过start()opts.prefetch可配置预加载策略及应用,通过prefetchApps()来配置使用立即排队预加载的微应用,默认预加载策略是使用window.requestIdleCallback()setTimeout(fn, 1)
  • 应用间通信:主要通过URLCustomEvent来处理,在一些简单场景下可基于props的方案会更直接便捷;

主要实现

  • 主应用安装qiankun后使用registerMicroApps()注册微应用,然后主应用启动qiankun主应用也可使用loadMicroApp()手动加载微应用
  • 微应用在自己的入口处导出bootstrap、mount、umount、update、unload钩子函数,供主应用特定时机调用
  • 主应用发起导航时,qiankun会根据配置的activeRule匹配微应用,对于第一次装载的微应用,主应用会首先调用其load逻辑(微应用中入口非钩子的部分),此时qiankun会创建微应用的JS沙箱生成容器DOM等等(使用了single-spa registerApplication()注册应用),然后执行bootstrapmount钩子函数分别进行初始化安装,在安装时会创建DOM实现样式隔离DOM事件监听放置DOM到container中等等;
  • URL再次发起导航时,qiankun重新使用activeRule来匹配应用,当重新匹配该微应用时会跳过bootstrap钩子函数,只需要初始化一次即可;

特性

  • 基于single-spa封装,提供了更加开箱即用的API
  • 技术栈无关,任意技术栈的应用均可使用/接入,不论是react/vue/angular/jquery还是其他框架;
  • HTML Entry 接入方式,让你接入微应用就像使用iframe一样简单;
  • 样式隔离,确保微应用之间样式互不干扰;
  • JS沙箱,确保微应用之间全局变量/事件 不冲突;
  • 资源预加载,在浏览器空闲时间预加载未打开的微应用资源,加速微应用打开速度;
  • umi插件,提供了@umijs/plugin-qiankun供umi应用一键切换成微前端架构系统;

用法