什么是巨石单体应用?
指的是一个前端应用随着业务增加,越来越多团队参与到应用的开发中,每个团队负责特定的业务领域,这会带来几个问题:
- 团队规模变大:沟通成本变高
- 应用规模变大:编译速度变慢,进而降低了开发、测试和部署效率,维护成本变高
为什么需要微前端?
为了解决巨石单体应用带来的问题,诞生了微前端的概念,达到以下目的:
- 应用自治:将一个大应用拆分成的多个应用,每个应用独立负责不同的业务领域,规模更小
- 团队自治:每个独立应用由不同的团队负责,可以独立开发、测试、部署,提升迭代效率
- 技术栈无关:每个独立应用可以根据团队需要选择不同的技术栈开发(建议尽量统一)
- 尝试新技术
- 老应用增量重构
不管实现方式是什么,在实践时可能需要考虑以下问题:
- js 沙箱
- 样式隔离
- 跨应用通信
- 应用间导航
- 应用版本不相互干扰
- 依赖共享
常见解决方案
框架
- qiankun:解决了 iframe 的各种问题
- microapp
- 无界
非框架
- iframe:最简单的方式,但是有很多问题
- 模块联邦:webpack5 新特性,但通过插件,vite 也能实现
关于 iframe
优点
- 自带样式隔离
- 自带 js 沙箱
缺点
- 每次显示 iframe 资源都要重新加载(睁一只眼闭一只眼)
- 刷新后无法保持 iframe 当前页面(好解决)
- 动态切换 src 后影响父页面的前进后退(好解决)
- 无法实现弹窗居中显示(无法解决)