游乐游手机版
首页/前端开发/文章详情

基于Web Components的HTML微模块联邦共享方案的设计与实现

时间:2026-07-06 06:56
WebComponents是浏览器原生的封装机制,不处理依赖版本与共享协商;模块联邦的核心是运行时依赖协商和单例控制。两者目标不同,强行用WebComponents替代模块联邦会导致依赖冲突和缺少错误兜底,需自行实现依赖管理。

在微前端架构中,Web Components 与模块联邦是两个常被混淆的概念。许多人认为它们都能实现“跨应用共享”,于是考虑换个封装形式即可。然而实际上,这两者所要解决的问题层次截然不同。

首先需要明确一个关键区别:Web Components 本质上属于浏览器原生的封装机制,其职责仅限于将自定义标签渲染至页面,而内部逻辑则各自独立。相比之下,模块联邦的核心优势在于运行时依赖协商能力。例如,当两个微应用各自打包了一份 React 库时,模块联邦可通过 shared 配置强制只加载一个共享实例。然而,Web Components 并不具备这一机制。

基于Web components的HTML微模块联邦共享方案

因此,将 Web Components 直接套用 Module Federation 的思路,很容易陷入误区。

Web Components 并非模块联邦的替代方案

许多开发者在看到 customElements.define()import('./remote.js') 都能加载代码时,便默认两者等同。但关键区别在于:Web Components 既不处理依赖版本,也不参与 shared scope 协商,更不具备 singleton 控制能力。

  • React/Vue 组件在跨应用复用场景下,若两个微应用使用了不同版本的 react,Web Components 无法自动对齐版本——它只负责渲染自定义标签,内部逻辑依然各自打包各自的 React 库
  • 诸如 shared: { react: { singleton: true } } 的配置,在 Webpack Module Federation 中有效,但在纯 Web Components 场景下则完全不起作用
  • 缺少 remoteEntry.js 的加载流程,也就没有初始化时的 init(sharedScope) 步骤,依赖冲突只能依靠人工规避

HTML 模块联邦 ≠ Web Components + import()

所谓“HTML 微模块联邦”,通常被误解为直接在 HTML 中引用 ,再使用 。这看似实现了解耦,实则暗藏三个硬伤:

  • 资源加载缺乏优先级控制: