webpack module federation 是需 host 与 remote 严格对齐的运行时协作机制:name 唯一、shared 精准配置、remoteentry.js 可访问且规范,组件即可像本地模块被 import 使用。

Webpack 的 Module Federation 不是自动互通的“开关”,而是一套需要 Host(宿主)和 Remote(远程)双方严格对齐的运行时协作机制。只要 name 唯一、shared 配置精准、remoteEntry.js 可访问且符合规范,组件就能像本地模块一样被 import 使用。
明确 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 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
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% 是卡在这一步,而非代码逻辑问题:
- 访问
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 的本质是运行时模块注册与加载,不是编译期合并:
- Remote 构建后生成
remoteEntry.js,Host 在运行时加载它并注册暴露的模块 - 只要配置对齐,Host 就能直接
import Header from 'navApp/Header',无需额外封装或适配层 - 支持按需加载,例如配合 React.lazy + Suspense 实现组件级动态加载
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










