模块联邦:动态运行时导入
了解 Webpack Module Federation 如何在运行时加载远程模块,而无需将它们捆绑到宿主应用中
模块联邦:动态运行时导入 是 CoddyKit 上的免费 React Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 React Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 React Academy 课程共包含 4 节课。
Module Federation 解决的问题
在多团队前端组织中,多个独立部署的应用往往需要共享用户界面组件和工具函数。发布到 npm 需要提升版本号、发布新版本,并让每个使用方应用全部重新部署——这会造成团队之间的紧密耦合和缓慢的迭代周期。
npm 方案及其缺点
传统方案(将共享代码发布为 npm 包)意味着,更新共享按钮组件需要依次完成:更新 npm 包、发布新版本、更新每个使用方应用的 package.json、重新构建并重新部署每个使用方应用。Module Federation 消除了所有这些步骤。
Module Federation 的作用
Module Federation 允许一个应用(“远程应用”)公开 JavaScript 模块,另一个应用(“宿主应用”)则可以在运行时加载并执行这些模块,而无需重新构建或重新部署宿主应用。当用户加载宿主应用时,它会按需动态获取远程应用的模块。
Webpack 5 原生支持
Webpack 5 通过 ModuleFederationPlugin 将 Module Federation 引入为一等内置功能。在 Webpack 5 之前,实现类似模式需要复杂的手动配置或第三方插件。该插件会自动处理所有动态加载和共享作用域管理。
核心概念:远程应用
远程应用是一个独立部署的应用,它会公开一个或多个模块——React 组件、工具函数或完整的功能页面——供其他应用使用。远程应用会构建一个 remoteEntry.js 清单,用于描述它公开了哪些内容以及如何加载这些内容。
核心概念:宿主应用
宿主应用是使用一个或多个远程应用模块的应用。宿主应用会在 Webpack 配置中按名称和网址引用远程应用。当宿主应用的代码导入远程模块时,Webpack 的 Module Federation 运行时会从远程应用的网址动态获取并执行该模块。
核心概念:共享模块
共享模块是只应加载一次的库(例如 React 和 React DOM),即使宿主应用和远程应用都包含它们也是如此。将 React 标记为共享单例后,Module Federation 会确保只运行一个 React 版本——这非常关键,因为 React 的钩子在存在多个实例时会失效。
remoteEntry.js 清单
构建远程应用时,Webpack 会按照配置的文件名生成 remoteEntry.js 文件。这个文件既是轻量级清单,也是引导脚本:它声明远程应用公开了哪些模块,列出这些模块的分块网址,并初始化共享作用域。宿主应用会先下载这个文件,以发现远程应用提供的内容。
运行时加载机制
当宿主应用遇到对远程模块的导入时,会先检查远程应用的代码是否已经加载。如果尚未加载,它会从远程应用的网址获取 remoteEntry.js,初始化共享作用域(协商共享库的版本),然后下载并执行包含所请求模块的特定分块。
实际应用中的独立部署
某个团队部署远程应用的新版本(更新后的 Button 组件),而无需修改宿主应用。下一个加载宿主应用的用户会自动获得新的 Button,因为宿主应用始终从当前的 remoteEntry.js 网址获取内容。无需重新构建宿主应用,无需重新部署宿主应用,也无需协调。
Module Federation 与内嵌框架的比较
较早的微前端模式使用内嵌框架(iframe)来隔离各团队负责的页面区域。内嵌框架可以提供强隔离,但会让共享状态、网址路由和样式统一变得极其困难。Module Federation 让所有内容处于同一个 JavaScript 上下文中,因此可以共享路由、共享身份验证状态并保持样式一致。
Module Federation 远程清单
remoteEntry.js 在 Module Federation 中起什么作用?
课程回顾
Module Federation 通过支持运行时模块加载,解决了共享前端代码的独立部署问题。远程应用通过 remoteEntry.js 公开模块;宿主应用可以动态使用这些模块,而无需重新构建。共享单例(React、React DOM)可以防止重复加载库。该架构实现了真正的独立部署:更新远程应用后,所有宿主应用都会立即看到更改。
常见问题解答
「模块联邦:动态运行时导入」课时是免费的吗?
是的 — 「模块联邦:动态运行时导入」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 React Academy 课程的其余内容,请升级到 CoddyKit PRO。 React Academy 课程共包含 4 节课。
「模块联邦:动态运行时导入」这节课中我会学到什么?
了解 Webpack Module Federation 如何在运行时加载远程模块,而无需将它们捆绑到宿主应用中 你通过在浏览器中直接运行的动手代码来练习 React Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 React Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 React Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「模块联邦:动态运行时导入」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 React Academy 课中编写并运行代码吗?
能。每节 React Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 模块联邦:动态运行时导入
- 配置宿主与远程 React 应用
- 在远程模块之间共享状态和路由
- 版本管理、部署与编排