Skip to content
目录

01 · 核心架构概述

定位

Qiankun 是面向浏览器的微前端运行时:在不改造子应用构建产物语义的前提下,通过 HTML 入口拉取子应用,在宿主页内完成 DOM 注入、脚本执行环境隔离、样式与动态插入行为约束,并把子应用暴露的 bootstrap / mount / unmount 交给 single-spa 做应用级生命周期与路由驱动调度。

本仓库 next 分支(v3)相对历史版本的核心变化可概括为:

  • 流式 HTML 解析:入口 HTML 以 ReadableStream 方式消费,边下边解析边挂 DOM,而不是等整页 HTML 文本到齐再一次性 innerHTML
  • 沙箱模型:以 Proxy 膜(Membrane)+ with(this) 执行腔(Compartment) 组织「伪全局对象」,脚本经转译后以 Blob URL 等方式在受限全局上执行。
  • 包拆分loader / sandbox / shared 独立包,qiankun 包做门面编排。

顶层数据流(从 entry 到子应用导出)

  1. 宿主调用 registerMicroApps + startloadMicroApp
  2. loadApppackages/qiankun/src/core/loadApp.ts)组合:
    • 可选 createSandboxContainer → 得到子应用视角的 globalThislatestSetProp 等;
    • loadEntry@qiankunjs/loader)拉流、替换 <head>、写入容器 DOM;
    • 默认 nodeTransformer 内调用 transpileAssets,对 script/link 做沙箱执行、依赖复用、preload 修正等。
  3. loadEntry 返回的 Promise 在「入口脚本」执行完成后 resolve,解析值为沙箱上最近一次 window.xxx = ... 赋值对应的属性(即入口 bundle 挂到伪全局上的导出对象)。
  4. getLifecyclesFromExports 从该对象(或 window[appName] 等 fallback)取出生命周期函数,封装成 single-spa 的 ParcelConfigObject

与 Umi 的关系(易混淆点)

  • Qiankun:运行时微前端框架(本仓库)。
  • Umi:前端应用框架;通过插件把子应用构建成可被 Qiankun 消费的形态(如 publicPath、生命周期导出等)。

理解本仓库时,应把「子应用如何打包」与「Qiankun 如何执行 HTML/JS」分开:Qiankun 假设入口 HTML 中能通过约定(如带 entry 的外链脚本)找到唯一入口脚本,并从其执行副作用中拿到导出。

下一节

02-Monorepo包职责与数据流.md

MIT License.