时间:26-04-23
在前端工程化的演进路上,模块联邦(Module Federation)早已不是什么新名词。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
如果你深度使用过 Webpack 5,大概率已经接触甚至实践过它。但一个不争的事实是,在 Vite 生态中,这项能力长期处于缺失状态。甚至有不少团队,仅仅因为“Vite 没有 Module Federation”,而选择继续坚守 Webpack。
直到最近,一个关键节点出现了:
官方正式推进 Module Federation 2.0,并明确推荐使用 @module-federation/vite。这意味着什么?
这意味着,Module Federation 正在从一个“Webpack 专属特性”,演变为“前端基础设施”的一部分。而 Vite 生态,也终于补上了这块至关重要的拼图。
如果你还不熟悉,那确实该补补课了。
用最简单的一句话解释:Module Federation 就是可以让多个独立的前端应用在运行时“动态组合”起来,并且能智能地共享依赖。
在没有 Module Federation 的时代,多应用共享代码要么靠复制粘贴,要么靠发布到 npm 再安装,流程冗长,且依赖容易冲突。
Module Federation 带来的改变是碘伏性的:
它的本质,就是把“模块共享”这件事,从构建时搬到了运行时。
Module Federation 的核心架构其实很清晰,主要围绕三个角色展开(这个面试时经常被问到):
它们的关系可以理解为:Host(主应用)动态地去加载 Remote A、Remote B 等远程模块。值得注意的是,一个应用完全可以同时扮演 Host 和 Remote 两种角色。
(1) 动态加载模块
通过 import(“remote/Button”) 这样的语法,就能像使用本地模块一样,无缝引入远程代码。
(2) 依赖共享
通过配置 shared: { react: { singleton: true } },可以确保所有应用共享同一个 React 实例,避免版本冲突和包体积膨胀。
(3) 独立部署
子应用可以单独更新、发版,主应用无需重新构建或发布,真正实现了“前端微服务”的构想。
如果说之前是铺垫,那么这次 2.0 的升级方向,才是真正“重磅”的部分。
现在,它开始广泛支持:
它不再与 Webpack 深度绑定。
2.0 版本带来了一系列增强:更完善的 Manifest 支持、运行时解耦、插件系统、开发者工具以及更好的类型支持。
必须明确一点:Module Federation 的核心价值不在于打包器,而在于运行时。这恰恰解释了为什么官方最新的选择,不是在 Rolldown 里重写 MF,而是直接推进 @module-federation/vite。
这也是本次更新的核心主角——让 Vite 原生、完整地拥有 Module Federation 能力。
上手并不复杂。
安装:
npm install @module-federation/vite
Remote(子应用)配置示例:
import { federation } from “@module-federation/vite”;
export default {
plugins: [
federation({
name: “remote_app”,
filename: “remoteEntry.js”,
exposes: {
“./App”: “./src/App.vue”
},
shared: [“vue”]
})
]
};
Host(主应用)配置示例:
import { federation } from “@module-federation/vite”;
export default {
plugins: [
federation({
name: “host_app”,
remotes: {
remote: {
type: “module”,
entry: “http://localhost:5001/remoteEntry.js”
}
},
shared: [“vue”]
})
]
};
使用远程模块:
之后,在主应用中就可以直接动态导入:
import(“remote/App”);
使用体验和本地模块几乎无异。
Vite 正式补齐了“微前端”这块核心能力,标志着 Module Federation 进入了新的时代。
@module-federation/vite 是这个趋势最关键的一次落地实践。相关链接: