Webpack Module Federation 是需 Host 与 Remote 严格对齐的运行时协作机制,核心在于角色分明、name 唯一、shared 配置精准、remoteEntry 可访问且符合规范,三者对齐后组件可如本地模块直接 import 使用。

Webpack 的 Module Federation 不是“开个开关就能互通”的功能,而是一套需要 Host 和 Remote 双方严格对齐的运行时协作机制。它让独立构建、独立部署的前端应用,能在浏览器中按需加载彼此暴露的组件和共享依赖,但成败关键在于配置是否精准。
明确角色:Host 消费,Remote 提供
一个应用不能模糊地“既当 Host 又当 Remote”——必须清晰划分职责:
- Remote 应用通过 exposes 显式导出模块路径,例如:
./Button → ./src/components/Button.jsx - Host 应用通过 remotes 声明远程地址,格式为
remoteName@http://host:port/remoteEntry.js - 双方的 name 必须全局唯一,比如 Remote 设为
uiLib,Host 就不能也叫uiLib,否则运行时注册会冲突
共享依赖必须显式控制实例与时机
React、React DOM 等核心库若未正确共享,会直接导致 Invalid hook call 或上下文丢失:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
react 和 react-dom 必须成对配置:
singleton: true+eager: true,确保启动时就加载且全局唯一 -
requiredVersion 是硬性约束,不是范围匹配。设为
'^18.2.0',但本地装的是18.1.0,Webpack 就会降级使用本地副本,造成双实例 - 工具类库如
lodash-es可设singleton: false,但要注意导出方式是否一致(避免某方用export * as Lodash覆盖命名空间)
确保 remoteEntry.js 可访问且符合规范
Host 加载失败,90% 是卡在这一步,而非代码逻辑问题:
立即学习“Java免费学习笔记(深入)”;
- 访问
http://localhost:3002/remoteEntry.js必须返回 JS 文件(HTTP 200 +Content-Type: application/javascript),不能是 404 或 HTML 页面 - Remote 服务必须开启 CORS,否则浏览器直接拦截请求,控制台报
Cross-Origin Request Blocked - Host 中导入写法要与 exposes 路径完全对应,例如:
import Button from 'uiLib/Button'
不复杂但容易忽略
Module Federation 的本质是运行时模块注册与加载,不是编译期合并。只要 Host 和 Remote 的 name、shared 策略、remoteEntry 地址三者对齐,组件就能像本地模块一样被 import 使用,无需额外封装或适配层。

















