微前端源码精讲

前言

作者 杨艺韬 · 2,790 字

前言

写作动机

很多团队第一次体会到"微前端不是用就行了"的那一刻,都是在生产环境被一段看似无害的 CSS 击穿的时候:

/* 子应用的"无害"样式 */
.container {
  margin: 0 auto;
  width: 100%;
  box-sizing: border-box;
}
/* 主应用也有一个 .container —— 全局布局被覆盖 */

这类事故的根因大多不在代码质量,而在对隔离机制的误解——乾坤的 strictStyleIsolation 在特定 Shadow DOM 场景下失效、ProxySandboxget 拦截器为什么要区分 windowselfprocessCSSLoading 为什么需要三次正则替换、reroute 函数那看似混乱的状态机背后藏着怎样的并发控制——这些问题文档不会告诉你,只有源码会。

本书的写作动机只有一条:把这些必须读源码才能理解的设计决策,系统地讲清楚。

为什么在 2026 年写这本书

"微前端"这个词诞生于 2016 年 ThoughtWorks 的技术雷达,至今已整整十年。十年间,这个领域经历了从概念探索到生产落地、从百花齐放到格局初定的完整周期。如果你在 2020 年搜索"微前端",几乎所有结果都指向同一个答案:乾坤

但 2026 年的微前端世界,已经不是乾坤一家独大的时代了。

三个关键变量改变了整个格局:

Module Federation 2.0 —— Webpack 5 引入的 Module Federation 开创了"编译时共享"的范式,而 2.0 版本在 Zack Jackson 的主导下,实现了跨构建工具(Webpack/Rspack/Vite)的统一运行时。这意味着你不再需要运行时沙箱来隔离子应用——模块联邦在编译阶段就解决了依赖共享和版本协商的问题。这是一次范式级的转变。

Rspack —— 字节跳动开源的基于 Rust 的构建工具,以 Webpack 兼容的 API 提供了 10-50 倍的构建速度提升。当构建时间从"等 3 分钟"变成"等 3 秒",单体前端"构建慢"这个最常见的微前端动机之一被大幅削弱。Rspack 不是微前端框架,但它深刻地改变了微前端的决策方程式。

Wujie(无界) —— 腾讯开源的微前端方案,用 Web Components + iframe 的组合打出了一条全新路线。它没有走乾坤/single-spa 的运行时沙箱路线,而是利用 iframe 天然的隔离能力,再通过 Web Components 实现组件级的嵌入。优雅、简洁,且隔离性接近完美。

2016 ────── 2019 ────── 2022 ────── 2025 ────── 2026
  │           │           │           │           │
  概念提出    single-spa   乾坤2.x     MF 2.0     多方案并存
  ThoughtWorks  成熟       成为事实标准  Rspack 1.x  格局已变
                                      Wujie 成熟

在这个时间点写微前端架构书,恰好处于一个绝佳的观察窗口: 旧范式已经充分验证,新范式已经基本成型,而两者之间的张力——运行时隔离 vs 编译时共享、重沙箱 vs 轻隔离、框架绑定 vs 标准原生——正是理解微前端架构本质的最佳切入点。

下图展示了微前端技术方案的演进脉络与各方案的核心定位:

flowchart TB
    Origin["2016 ThoughtWorks\n提出微前端概念"] --> IFrame["iframe 方案\n天然隔离,体验割裂"]
    Origin --> SPA["single-spa (2018)\n路由即应用边界"]
    SPA --> Qiankun["乾坤 qiankun (2019)\nProxy 沙箱 + HTML Entry"]
    SPA --> Garfish["Garfish (字节)\nLoader/Router/Sandbox 三层分离"]
    IFrame --> Wujie["Wujie (2022)\niframe 隔离 + WebComponent 渲染"]
    Qiankun --> MF1["Module Federation 1.0 (2020)\n编译时共享,Webpack 5"]
    MF1 --> MF2["Module Federation 2.0 (2024)\n类型安全 + 运行时插件 + 跨构建工具"]
    MF2 --> Rspack["Rspack + MF 2.0\nRust 编译,10-50x 构建加速"]

    style Origin fill:#e3f2fd,stroke:#1565c0
    style Qiankun fill:#fff3e0,stroke:#e65100
    style MF2 fill:#e8f5e9,stroke:#2e7d32
    style Wujie fill:#f3e5f5,stroke:#7b1fa2
    style Rspack fill:#e8f5e9,stroke:#2e7d32

本书与其他微前端文章/书籍有何不同

市面上关于微前端的内容大致分为四类:

类别 典型内容 读完之后你会…
博客文章 某个框架的快速上手、踩坑记录、配置示例 知道怎么用,但不知道为什么这样设计
概念介绍书 微前端是什么、有哪些方案、架构图、决策树 能做技术选型,但遇到深层问题无从下手
单框架源码解读 逐行分析某一个框架的实现 深入理解了一个框架,但缺乏横向视野
本书 从源码层面横向剖析多个框架,揭示共性问题域与不同解法的设计权衡 理解微前端架构为什么这样演化,能独立评估任何方案

区别的核心在于:博客教你配置,概念书教你选择,单框架书教你一种实现,而本书教你理解问题本身

下图以微前端的核心问题域为中心,展示了本书的知识结构与各章节的覆盖范围:

flowchart LR
    Core["微前端核心问题域"] --> Isolation["隔离机制"]
    Core --> Loading["资源加载"]
    Core --> Communication["应用通信"]
    Core --> Routing["路由调度"]
    Core --> Sharing["依赖共享"]

    Isolation --> JS["JS 沙箱\n第4章"]
    Isolation --> CSS["CSS 隔离\n第5章"]
    Isolation --> IFrame["iframe 沙箱\n第13章"]

    Loading --> HTMLEntry["HTML Entry\n第3/5章"]
    Loading --> RemoteEntry["remoteEntry.js\n第10章"]

    Communication --> GlobalState["全局状态\n第6章"]
    Communication --> Props["Props 传递\n第6章"]
    Communication --> ModuleImport["模块导入\n第9章"]

    Routing --> SingleSpa["single-spa 路由\n第7/8章"]

    Sharing --> Externals["externals 约定"]
    Sharing --> MF["Module Federation\n第9/10/11章"]

    style Core fill:#e3f2fd,stroke:#1565c0
    style Isolation fill:#ffebee,stroke:#c62828
    style Loading fill:#fff3e0,stroke:#e65100
    style Communication fill:#e8f5e9,stroke:#2e7d32
    style Routing fill:#f3e5f5,stroke:#7b1fa2
    style Sharing fill:#fffde7,stroke:#f9a825

当你理解了 JS 隔离的本质是作用域代理,CSS 隔离的本质是样式边界,应用加载的本质是资源编排,通信的本质是事件总线与共享状态的权衡——你就不再需要"选框架"了。你会直接看到每个框架在这些维度上的设计取舍,然后做出真正基于理解的决策。

教你用乾坤的文章有一千篇。教你理解乾坤为什么这样设计、以及它的设计在什么条件下会失效的——几乎没有。

本书读者

这本书为五类读者而写:

前端架构师 —— 你需要为团队做微前端技术选型,或者设计大规模前端应用的架构。本书的横向对比表格和设计权衡分析,会成为你决策时的参考坐标系。每个方案的优势边界和失效条件,比"哪个更好"的简单结论更有价值。

资深前端工程师 —— 你已经在用乾坤或 single-spa,但遇到了文档覆盖不到的深层问题:沙箱逃逸、样式穿透、路由冲突、性能瓶颈。本书从源码层面解释这些问题的根因,不是告诉你"加个配置",而是告诉你为什么那个配置能生效、什么时候它不能

全栈工程师 —— 你同时负责前端和后端,需要理解微前端与微服务的异同,以及前端架构如何与后端部署策略协同。本书的架构分析采用系统思维视角,不局限于前端领域。

技术管理者 —— 你需要评估微前端是否适合你的团队和业务场景。第 1 章的"什么时候不该用微前端"和成本分析,会帮你避免盲目跟风的代价。

学生与研究者 —— 每章包含设计模式的系统性分析和框架横向对比,可作为论文引用和研究参考。章末思考题覆盖概念理解、实践应用和开放讨论三个层次。

不适合的读者:如果你在寻找一本"如何五分钟接入乾坤"的快速上手指南,这不是。本书假设读者已具备前端开发能力,想深入理解微前端架构的底层原理和设计哲学。

前提:具备 TypeScript/JavaScript 基础和现代前端开发经验(React/Vue/Angular 至少一种)。如果你使用过至少一个微前端框架,阅读会更加顺畅。

阅读路线图

本书支持多种阅读方式。你可以从第 1 章顺序通读,也可以根据自身情况选择快速路径:

路径 章节 适合
快速精华 前言 → 1 → 乾坤 JS 沙箱 → 乾坤 CSS 隔离 时间有限,2-3 小时获取核心架构洞察
乾坤深入 1 → 2 → 3 → 4 → 5 生产环境使用乾坤,想吃透每个细节
single-spa 专攻 1 → 6 → 7 → 8 理解微前端基座的底层路由与生命周期
架构决策 前言 → 1 → 各框架对比章节 架构师/技术管理者,关注选型与权衡
全景通读 按顺序从第 1 章读到最后 系统性学习者,建立完整知识体系

下图展示了不同阅读路径之间的关系与章节依赖:

flowchart TD
    Preface["前言"] --> Ch1["第1章\n为什么需要微前端"]
    Ch1 --> QiankunTrack["乾坤深入路线"]
    Ch1 --> SPATrack["single-spa 路线"]
    Ch1 --> MFTrack["Module Federation 路线"]
    Ch1 --> DecisionTrack["架构决策路线"]

    QiankunTrack --> Ch2["第2章 核心问题"]
    Ch2 --> Ch3["第3章 乾坤总览"]
    Ch3 --> Ch4["第4章 JS 沙箱"]
    Ch4 --> Ch5["第5章 CSS 隔离"]
    Ch5 --> Ch6["第6章 应用通信"]

    SPATrack --> Ch7["第7章 single-spa 核心"]
    Ch7 --> Ch8["第8章 路由拦截"]

    MFTrack --> Ch9["第9章 MF 设计哲学"]
    Ch9 --> Ch10["第10章 Webpack 5 MF 源码"]
    Ch10 --> Ch11["第11章 MF 2.0 与 Rspack"]

    DecisionTrack --> Ch15["第15章 选型决策框架"]
    Ch15 --> Ch16["第16章 DevOps"]
    Ch16 --> Ch17["第17章 性能工程"]
    Ch17 --> Ch18["第18章 设计模式"]

    style Preface fill:#e3f2fd,stroke:#1565c0
    style QiankunTrack fill:#fff3e0,stroke:#e65100
    style SPATrack fill:#f3e5f5,stroke:#7b1fa2
    style MFTrack fill:#e8f5e9,stroke:#2e7d32
    style DecisionTrack fill:#fffde7,stroke:#f9a825

工程师建议顺序通读,每章旁边打开源码,边读边调试。急性子直接翻到第 1 章乾坤 JS 隔离,那是整本书最精彩的起点之一。

源码与约定

本书涉及多个微前端框架的源码分析,以下是各框架的版本约定:

框架 版本 说明
乾坤 (qiankun) 2.x 当前生产环境最广泛使用的版本
single-spa 6.x 微前端基座的事实标准
Module Federation 2.0 跨构建工具的统一模块联邦
Rspack 1.x 高性能构建工具,MF 2.0 的重要载体

所有代码示例均从源码中提取,标注对应文件路径和行号。部分代码为可读性做了适度简化(去除边界检查、简化类型标注),但核心逻辑与设计意图始终忠实保留。

代码示例统一使用 TypeScript/JavaScript,所有框架的源码分析基于其 GitHub 仓库的对应版本 tag。

配套资源

  • 本书在线版book.yangyitao.com — 持续更新
  • 勘误与反馈:在线版每章底部均可评论反馈

本书对乾坤、single-spa、Module Federation、Wujie 以及所有微前端开源项目的贡献者致以谢意。kuitos(乾坤)、Joel Denning(single-spa)、Zack Jackson(Module Federation)等维护者在 GitHub Issue 与 PR 里的讨论,是本书许多源码解读的一手来源。


杨艺韬 2026 年春,北京