【Webpack】模块联邦

1. 什么是模块联邦?

模块联邦(Module Federation)是 Webpack 5 引入的一种机制 ,它允许多个独立构建和部署的应用之间,动态共享和加载代码

换句话说:

  • 以前不同项目的代码需要打包在一起(或者通过 npm 包共享);
  • 有了模块联邦,A 应用可以直接在运行时加载 B 应用的模块,而不需要重新打包部署。

👉 这为 微前端架构 提供了更灵活的技术实现。


2. 核心机制

  • Host(宿主应用):需要远程加载模块的应用。
  • Remote(远程应用):提供模块给别人用的应用。

在 Webpack 配置里,使用 ModuleFederationPlugin

js 复制代码
// A 应用(Host)
new ModuleFederationPlugin({
  name: "hostApp",
  remotes: {
    remoteApp: "remoteApp@http://localhost:3001/remoteEntry.js",
  },
})

// B 应用(Remote)
new ModuleFederationPlugin({
  name: "remoteApp",
  filename: "remoteEntry.js",
  exposes: {
    "./Button": "./src/components/Button",  // 对外暴露组件
  },
})

之后,A 应用可以这样使用 B 应用的组件:

js 复制代码
import Button from "remoteApp/Button";

Webpack 会在运行时从 http://localhost:3001/remoteEntry.js 拉取模块。


3. 模块联邦的优势

  • 真正的运行时共享:不同应用之间无需重新打包,就能使用对方的模块。
  • 版本兼容:能在一定程度上解决依赖版本不一致问题(共享依赖机制)。
  • 支持微前端:多个团队开发的应用可以独立部署,又能组合成一个完整应用。
  • 减少重复打包:比如 React、Vue 等公共库,可以配置成共享,避免多次加载。

4. 应用场景

  • 微前端架构:一个大项目拆成多个子应用,按需加载。
  • 跨团队组件共享:多个项目共用一套组件库,而不用发 npm 包。
  • 渐进迁移:老系统和新系统逐步融合,先联邦引入,再逐步替换。

5. 总结

模块联邦是 Webpack 5 新增的一个特性,它允许多个独立构建和部署的应用在运行时共享模块。

它的核心是 ModuleFederationPlugin,通过 Host 和 Remote 的配置,可以让一个应用动态加载另一个应用的模块,而不需要重新打包。

优点是支持微前端、减少重复依赖、提升跨项目的代码复用能力。常见场景有微前端架构、跨团队共享组件库、老项目迁移等。

相关推荐
hunterandroid1 小时前
[Android 从零到一] Compose LazyColumn 性能优化:key、稳定性与重组治理
android·前端
烬羽2 小时前
从 nest new 到 Hello World:一个最小 NestJS 项目,讲透工厂 + 装饰器 + 模块化
设计模式·node.js·nestjs
lichenyang4532 小时前
从一次团队邀请开始:用 React、NestJS 与 Socket.IO 做可靠的实时通知
前端
vtian2 小时前
一篇文章吃透 Monorepo:pnpm + Turborepo + Changesets 全流程实战(含 8 个踩坑)
前端
默_笙2 小时前
❗ 点击计数按钮,为什么"峨眉队"也跟着重新渲染?React.memo 说:我记住了
前端·javascript
31535669132 小时前
DeepSeek Harness 发布后,我没急着跑 Demo,先把 `.agents/` 翻了一遍
前端·后端·github
名字还没想好☜2 小时前
Next.js 用 Server Components 直连数据库:去掉 API 层的边界,和三条别踩的安全红线
前端·javascript·数据库·安全·react·next.js
学习zhao极致it2 小时前
2020全新React教程全家桶实战redux+antd+React Hooks前端js视频
前端
用户921080262862 小时前
Bubble 消息操作区改造:复制、重新生成和反馈
前端
LEE3 小时前
AI Agent 都在疯狂加功能,它说:我全砍了
前端·后端