0Pricing
React Academy · 课时

模块联邦:动态运行时导入

了解 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 模块联邦:动态运行时导入
  2. 配置宿主与远程 React 应用
  3. 在远程模块之间共享状态和路由
  4. 版本管理、部署与编排
← 返回 React Academy