背景
当你接手一个前后分离的XXX管理系统时,不断迭代之后,就会发现一个项目上百个页面文件,打包速度变得越来越慢。上线的时候胆战心惊,每一次更新不知道这次的改动,有没有影响其他模块。甚至在增加另外一个项目模块入口时,明明是一个系统内容,但是却分成了两个系统,每次切换都需要auth认证,使别人认为是两个不同的系统。
就如下图,项目开始时,只有一个基础服务加部分其他中心的功能,当长时间迭代和参与人员,团队的变化之后这个系统将会从一个普通的应用,在不断迭代过程中就变成一个巨石应用,之后将会越来越难维护。
那前端也需要出现一种架构,能够解耦并且使这个项目更加健壮。这里就有了一个新概念--微前端架构。
微前端核心价值
在上面的描述提出的问题,我们的微前端架构应该具备以下几个点:
- 独立开发,独立部署
子应用仓库独立,前后端独立开发,部署之后主框架自主完成更新
- 独立运行时
每个子应用之间状态隔离,运行时状态不共享
- 与技术栈无关
主框架不限制子应用的技术栈,子应用完全自主
技术方案
从上述知道微前端架构的核心价值,但是我们该如何实现呢?其实解决方案大致分为两个方向:
- 单实例:同一时间,只有一个子应用被展示。通常是使用router的切换来切换不同的子应用
- 多实例:同一时间,可以展示多个子应用。通常是使用web coponents来封装,子应用就像一个业务组件。切换还是需要依靠路由变化。
不管哪种方式,架构大致如下图:
qiankun.js
qiankun就是一款由蚂蚁金服推出的比较成熟的微前端框架,基于 single-spa 进行二次开发,用于将 Web 应用由单一的单体应用转变为多个小型前端应用聚合为一的应用。
网站地址:https://qiankun.umijs.org/api原理如下图:
官方案例地址:github.com/umijs/qiank…
运行后,代码入图所示:HTML entry接入的方式,让你接入微应用像使用 iframe 一样简单。但并没有用到iframe。
qiankun.js的详细介绍见下一篇