Webpack + Module Federation+ 模块联邦

基于 Webpack 5 Module Federation 实现跨应用模块共享与微前端实践。

ModuleFederationPlugin 是 Webpack 5 内置能力,Vue 项目通过它暴露与消费远程模块,实现应用间共享。

✓ 跨应用共享模块✓ Webpack 5 原生支持 ✕ 生态较新,实践经验少

方案简介

本方案来自 webpack-china/awesome-webpack-cn 收录的 Webpack 5 主题文章:使用 ModuleFederationPlugin 在 Vue 项目中体验模块联合(Module Federation)。模块联合是 Webpack 5 引入的重要能力,允许一个 JavaScript 应用在运行时动态加载另一个独立构建的应用导出的模块,从而实现多个团队、多个应用之间的代码共享与协作,是构建微前端架构的官方推荐路径之一。

该方案适合维护多个 Vue 应用、希望在应用间共享组件或公共逻辑、又不想通过 npm 包发布流程同步代码的团队。仓库同时收录了《Webpack 5 之 模块联合(Module Federation)》作为概念补充,帮助读者系统理解该机制。

亮点与能力

  • 运行时动态加载其他应用导出的模块
  • 多个独立构建的应用可共享代码
  • 由 Webpack 5 原生插件支持,无需额外工具
  • 可直接在既有 Vue 项目中落地尝试

组成与分工

  • Webpack 5:构建工具本体,模块联合能力由其内置插件提供,无需额外打包器。
  • ModuleFederationPlugin:Webpack 5 核心插件,负责声明当前应用暴露(expose)的模块与依赖的远程模块,并在运行时完成加载。
  • Vue:宿主应用框架,文章以 Vue 项目为载体验证模块联合的初体验。
  • Module Federation(模块联合):整套机制的设计思想,即多个独立构建的应用组成一个联合体,按需共享模块。

实施步骤

1. 准备 Vue 项目

准备一个基于 Vue 的项目作为体验载体,构建工具切换为 Webpack 5。

2. 配置 ModuleFederationPlugin

在 Webpack 配置中引入 ModuleFederationPlugin,声明本应用暴露给外部的模块(expose)以及需要消费的远程模块(remotes),实现跨应用引用。

3. 构建并运行体验

完成上述配置后按原文《webpack 5 ModuleFederationPlugin vue 项目初体验》进行初体验验证,观察模块在应用间的共享效果;概念细节可同步阅读《Webpack 5 之 模块联合(Module Federation)》。

注意事项与常见问题

  • 原文定位为「初体验」,说明该能力在当时 Vue 生态中尚属新事物,生产落地需谨慎评估
  • 模块联合要求各参与应用构建工具与版本协同,老版本项目需先完成升级
  • 与 ESM 原生方案的取舍可参考仓库收录的《ESM vs Webpack 面向高性能构建的探索》

优缺点

  • ✓ 跨应用共享模块
  • ✓ Webpack 5 原生支持
  • ✕ 生态较新,实践经验少

出处

本方案挖掘自开源项目 webpack-china/awesome-webpack-cn,方案内容与实施命令均来自其 README 原文。

方案出处
webpack-china/awesome-webpack-cn:[印记中文](https://docschina.org/) - webpack 优秀中文文章
3793 star [印记中文](https://docschina.org/) - webpack 优秀中文文章

本方案由真实开源项目挖掘整理,实施命令均来自其 README 原文,安装使用请遵循项目开源协议。