写点什么

Module Federation 2.0 正式发布稳定版,逐步摆脱对 Webpack 的依赖

作者:Daniel Curtis
  • 2026-04-14
    北京
  • 本文字数:1401 字

    阅读完需:约 5 分钟

作为在 webpack 5 中引入的微前端代码共享机制,Module Federation发布 2.0 稳定版。这一版本在架构上进行了较大幅度的重构,基于字节跳动内部基础设施的实践经验,并由 Module Federation 原作者 Zack Jackson 共同参与开发。该版本最早由字节跳动 Web Infra 团队于 2024 年 4 月在 GitHub 上公布,引入了动态 TypeScript 类型提示、解耦的运行时层、Node.js 支持,以及大幅扩展的打包工具生态。

 

2.0 中最重要的改进之一是动态类型提示。在早期版本中,在 TypeScript 项目中消费远程模块时往往会丢失静态类型信息,团队要么需要维护一套共享类型包,要么只能使用 any。Module Federation 2.0 支持在开发阶段自动生成并加载远程模块的类型信息,提供类似 npm link 的热更新体验。Dunelm Technology 的 Rowan Powell 表示,这一功能“显著简化了开发流程”,不再需要“在各个文件中手动查找类型定义”。

 

在架构层面,2.0 将 Module Federation 的运行时与底层构建工具完全解耦,在不同平台之间实现了更一致的实现方式,使模块加载行为不再依赖具体的打包工具。目前已支持包括 webpack、Rspack、Rollup、Rolldown、Rsbuild、Vite 和 Metro 在内的多种打包器;在框架层面支持 Next.js、Modern.js、Rspress 和 Storybook,同时兼容 React、Vue 和 React Native 等 UI 技术栈。这一扩展解决了长期以来的一个痛点:过去由于与 webpack 深度绑定,一些团队对引入 Module Federation 持观望态度,而现在可以在不更换现有工具链的情况下进行集成。

 

另一个值得关注的扩展是对 Node.js 运行时的原生支持。这意味着远程模块不仅可以在前端使用,也可以被服务端渲染层、BFF 服务以及 Node 微服务消费,从而在前后端之间实现统一的模块分发模型。同时,新引入的 mf-manifest.json 协议也简化了部署平台的集成,使跨独立部署应用之间的版本与资源管理更加清晰可控。

 

针对团队在引入远程模块时对副作用的顾虑,2.0 提供了一个 Side Effect Scanner 工具。这是一个 CLI 工具,可以对构建产物进行静态分析,在集成前识别全局变量污染、事件监听注册以及 CSS 选择器作用域等潜在问题。此外,配套的 Chrome 扩展也进行了升级,在界面和调试能力上都有所增强,可以更直观地查看运行时依赖关系。

 

对于从 Module Federation 1.x 迁移的团队,项目支持渐进式升级。v2 插件以 @module-federation/enhanced 的形式发布,迁移主要是在打包配置中替换插件引用即可。

 

社区整体对动态类型提示和 Chrome DevTools 增强持积极态度,但仍存在一定质疑。在 Reddit 上,有开发者表示 Module Federation 依然较为复杂,并将其与 monorepo 工具进行对比:

我用过 Module Federation,体验比较复杂;如果使用 pnpm 的 monorepo 配合 catalogs 和 turborepo,开发体验要好很多。我参与过包含几十个内部包和应用的项目,这类工具处理起来更顺手。

 

与此同时,Single-SPA、import maps 和 Piral 等替代方案也在持续吸引团队,它们提供了更轻量的微前端实现方式,并且不依赖打包器插件。不过,在大规模场景下,Module Federation 在运行时版本协商和内置错误边界等方面仍具备一定优势。

 

Module Federation 本质上是一种用于拆分 JavaScript 应用的开源架构模式及插件生态,最初由 Zack Jackson 在 webpack 5 中提出,目前由字节跳动 Web Infra 团队与社区共同维护。该项目采用 MIT 许可证,其核心包 @module-federation/enhanced 已发布在 npm 上。