一、 为什么我们需要微前端?
在 Module Federation 出现之前,前端项目变大后通常面临“巨石应用(Monolith)”的困境:
- 构建慢:改一行代码,打包几分钟。
- 部署难:一个模块的 Bug 导致整个系统回滚。
- 技术栈锁死:想在一个 React 15 的老项目里用 Vue 3 或 React 18,几乎不可能。
微前端的核心思想就是:将一个超级 App 拆分成多个独立的微应用,它们可以独立开发、独立部署,但在用户看来是一个整体。
二、 什么是 Module Federation?
在 Webpack 5 之前,微前端的主流方案是 qiankun(基于 single-spa,基座模式)或 iframe。
- iframe:隔离性最好,但体验最差(路由状态丢失、弹窗遮罩问题)。
- qiankun:体验较好,但本质是“JS 沙箱 + DOM 劫持”,有一定的运行时开销和兼容性问题。
Module Federation (MF) 是 Webpack 5 引入的革命性功能。 它允许一个 JavaScript 应用在运行时动态加载另一个应用的代码。
- 去中心化:没有绝对的“基座”,A 可以引用 B,B 也可以引用 A。
- 原生模块:加载远程模块就像加载本地模块一样自然,没有沙箱的性能损耗。
- 依赖共享:多个微应用可以共享 React、Lodash 等库,避免重复加载。
三、 技术实践:如何落地?
假设我们有两个应用:
- App 1 (Host/Consumer): 主应用,负责布局。
四、 导师视角的“深水区”注意事项
配置跑通只是第一步,真正的挑战在于治理。以下是我在实际项目中总结的经验:
1. 依赖共享的地狱 (Shared Dependencies)