2026-02-21 01:45:13
一、为什么选择qiankun框架?
在公司平台涉及自研和外采等多个子系统的情况下,如何将这些子系统前端界面集成到一起,组成统一平台管理界面,同时最大程度地保持用户体验一致,是项目团队面临的首要问题。传统iframe方案无法满足项目需求,因此经过反复技术对比,最终确定运用qiankun框架来解决当前任务需求。
使用qiankun框架,你可以做到以下几点:
而传统的iframe存在以下不足:
需要注意的是,qiankun框架在css和js方面需要制定规范进行隔离,否则容易造成全局污染,尤其是vue的全局组件和全局钩子。此外,qiankun不适用ie9以下的版本。
二、qiankun框架介绍
qiankun(乾坤)框架是基于single-spa框架搭建而成的,可以看作是single-spa的优化版。

在qiankun框架中,每个应用都是独立的,它们可以运行在不同的端口上。例如:


qiankun框架的大体实现思路如下:
相关知识点:
a、沙盒模型:
qiankun有一个沙盒模型,它能够在子系统加载之前对window对象做一个快照(拷贝),然后在子系统卸载的时候恢复这个快照,即可以保证每次子系统运行的时候都是一个全新的window对象环境。大致原理是记录window对象在子系统运行期间新增、修改和删除的属性和方法,然后会在子系统卸载的时候复原这些操作。
b、css污染解决方案:
qiankun解决css污染的办法是:在子系统卸载的时候,将子系统引入css使用的、标签移除掉。移除的办法是重写标签的appendChild方法。子系统加载时,会将所需要的js/css文件插入到标签,而重写的appendChild方法会记录所插入的标签,然后子系统卸载的时候,会移除这些标签。
c、子系统预请求实现方式:
我们需要知道子系统有哪些js/css需要加载,而借助systemJs加载子系统时,只知道子系统的入口文件(app.js)。qiankun不仅支持app.js作为入口文件,还支持index.html作为入口文件。它会用正则匹配出index.html里面的js/css标签,然后实现预请求。
总结:
qiankun框架几乎满足了所有微前端集成的需求,但也存在一些不足,如组件间通信问题随着业务复杂而变得难以管理,以及兼容性的问题。这也是后续需要进一步提升和解决的方向。