Appearance
Webpack 模块联邦 vs 微前端:到底是不是一回事
更新: 6/28/2026 字数: 0 字 时长: 0 分钟
很多人把"模块联邦"和"微前端"混为一谈,其实它们不在一个层面上。先把模块联邦本身讲清楚,再分相同点和不同点对比。一句话区分:微前端是一种架构思想(要解决什么问题),模块联邦是一种具体技术(用什么手段实现),后者可以是前者的一种落地方案,但两者解决问题的层次不同。
一、Webpack 模块联邦的核心本质

模块联邦(Module Federation)是 Webpack 5 引入的能力,它解决的核心问题是:让多个独立打包、独立部署的应用,在运行时直接共享和加载彼此的代码模块。
它的本质是运行时的代码共享:
- A 应用把自己的组件/方法"暴露"出去(expose),比如导出一个
Button组件、一个工具函数。 - B 应用在运行时"远程加载"A 暴露的这些模块(remote),像引入本地模块一样直接
import使用。 - 关键在"运行时"三个字:B 不需要在构建时把 A 的代码打进自己的包里,而是用户访问时,浏览器从 A 的地址实时拉取最新代码。A 更新了,B 不用重新打包就能用上新版本。

几个核心概念:
- Host(宿主):消费别人模块的应用。
- Remote(远程):暴露模块给别人用的应用。一个应用可以同时是 Host 和 Remote。
- Shared(共享依赖):React、Vue 这类公共库,可以配置成多个应用共用一份,浏览器只下载一次,避免重复加载、也避免多实例冲突。
简单配置示意:
js
// remote 应用(暴露方)
new ModuleFederationPlugin({
name: 'app_a',
filename: 'remoteEntry.js',
exposes: { './Button': './src/Button' },
shared: ['react', 'react-dom'],
})
// host 应用(消费方)
new ModuleFederationPlugin({
name: 'app_b',
remotes: { app_a: 'app_a@http://a.com/remoteEntry.js' },
shared: ['react', 'react-dom'],
})一句话本质:模块联邦是一套"跨应用、运行时、模块级"的代码共享机制,关注点是"代码怎么共享"。
二、相同点
模块联邦和微前端确实有交集,这也是它们容易被混淆的原因:
- 都为了拆分大型应用:两者都服务于"把一个庞大前端拆成多个可独立开发的部分"的目标,应对巨石应用难维护的问题。
- 都支持独立开发、独立部署:不同团队负责不同模块/子应用,各自迭代上线,互不阻塞。
- 都强调运行时集成:最终都是在用户浏览器里,把分散的几部分组合成一个完整应用呈现,而不是构建时静态合并。
- 都需要解决依赖共享问题:都要处理公共库(React/Vue)如何共用、避免重复加载和版本冲突。
- 模块联邦可以作为微前端的实现手段之一:用模块联邦来做微前端的子应用加载,是业界常见方案。
三、不同点

这是最关键的部分,从本质、适用场景、能力边界三个维度区分。
1. 本质层面的差异
- 微前端是架构理念:它是一套"如何组织多个子应用"的方法论,回答的是"怎么把多个独立应用集成到一个页面里、怎么隔离、怎么通信、怎么路由"。它不绑定任何具体技术,可以用 iframe、qiankun、single-spa、Web Components,也可以用模块联邦来实现。
- 模块联邦是具体技术:它是 Webpack 提供的一个功能,回答的是"代码模块如何跨应用共享和加载"。它本身不管隔离、不管路由编排,只管"把模块拿过来用"。
一句话:微前端是"要做什么"(应用级集成的架构),模块联邦是"用什么做"(模块级共享的工具)。
2. 适用场景的差异
- 模块联邦更适合:共享组件库、共享业务模块、多个应用复用同一套代码。比如团队 A 维护一套通用组件,团队 B、C 直接远程引用,A 更新后大家自动用上新版。重点在"代码复用"。
- 微前端更适合:把多个完整的、技术栈可能不同的子应用(比如一个 Vue 老系统 + 一个 React 新系统)整合进一个门户,按路由切换。重点在"应用整合",子应用往往是完整页面甚至完整系统。
3. 能力边界的差异
| 维度 | Webpack 模块联邦 | 微前端 |
|---|---|---|
| 定位 | 具体技术 / 工具 | 架构理念 / 方法论 |
| 共享粒度 | 模块级(组件、函数、依赖) | 应用级(完整子应用、页面) |
| 关注核心 | 代码如何运行时共享 | 子应用如何集成、隔离、编排 |
| 隔离能力 | 不提供 JS/CSS 沙箱隔离 | 通常提供样式/JS 沙箱、子应用隔离 |
| 路由编排 | 不管路由 | 提供主应用路由分发、子应用挂载 |
| 技术栈要求 | 较强绑定 Webpack(需统一构建工具) | 框架/构建工具无关,可混合技术栈 |
| 依赖共享 | 原生支持 shared,体验好 | 需各方案自行处理,差异较大 |
几个要点说清楚边界:
- 模块联邦不解决隔离:它把远程代码拉进来当本地用,默认共享同一运行环境,没有沙箱。两个应用的全局变量、CSS 可能互相污染,需要自己额外处理。微前端方案(如 qiankun)通常内置了 JS/CSS 隔离。
- 模块联邦不负责路由编排:它只管加载模块,主应用怎么根据 URL 切换子应用、子应用怎么挂载卸载,这些微前端要操心的事,模块联邦不涉及。
- 模块联邦对构建工具有要求:它是 Webpack 的能力,参与方一般都得用 Webpack 5(或兼容的工具如 Vite 插件)。微前端则可以不关心子应用用什么构建工具。
一句话总结
| Webpack 模块联邦 | 微前端 | |
|---|---|---|
| 是什么 | 一种运行时共享代码的技术 | 一种拆分集成应用的架构思想 |
| 解决什么 | 模块级代码如何跨应用共享 | 应用级如何集成、隔离、路由 |
| 关系 | 可作为微前端的实现手段之一 | 范围更大,可用多种技术实现 |
记住核心区别:模块联邦关注"代码共享"(模块级),微前端关注"应用集成"(应用级)。 模块联邦是一把好用的工具,微前端是要盖什么样的楼——你可以用这把工具去盖这栋楼,但工具不等于楼本身。如果只是想跨项目复用组件,模块联邦足够;如果要整合多个独立完整的系统并做隔离编排,那是微前端的范畴,模块联邦只是其中可选的一块拼图。