ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

qiankun 3.0 内置 single-spa 7.0:解读 @qiankunjs/single-spa 的 vendor 化改造(RFC 3168)

qiankun 3.0 内置 single-spa 7.0:解读 @qiankunjs/single-spa 的 vendor 化改造(RFC 3168) 前端微前端【免费下载链接】qiankun Blazing fast, simple and complete solution for micro frontends.项目地址https://gitcode.com/gh_mirrors/qi/qiankun点击查看免费下载导读本篇基于仓库中的变更记录.changeset/auto-9d70d5e.mdfeat: vendor single-spa 7.0 as qiankunjs/single-spa (RFC #3168) (#3170)深入剖析 qiankun 3.0 系列将 single-spa 7.0 分支整体 vendor 化、以qiankunjs/single-spa身份纳入 monorepo 的架构决策。你将了解到vendor 化基线从哪里来、与上游存在哪些刻意维护的行为分歧尤其是bootstrap → init重命名的整体回退、哪些不变量契约绝不允许破坏以及qiankun主包与 UI 绑定层如何消费这个新包。读完本文你可以依据仓库源码快速定位这个 fork 的关键实现、判断升级到 qiankun 3.0 时的兼容性影响并掌握后续与上游同步的完整流程。一、变更记录原文与版本影响面.changeset/auto-9d70d5e.md全文只有一段标准 changesets 描述--- qiankunjs/single-spa: minor qiankunjs/ui-shared: minor qiankun: minor --- feat: vendor single-spa 7.0 as qiankunjs/single-spa (RFC #3168) (#3170)它宣告了三点信息新增了一个 npm 包qiankunjs/single-spa作为 qiankun 官方 vendor 的 single-spa fork版本号走本 monorepo 的 changesets 发布流程与上游 beta 编号完全解耦见 packages/single-spa/package.json 中0.1.0-rc.1的版本与描述。三个包同时获得 minor 升级qiankunjs/single-spa、qiankunjs/ui-shared、qiankun主包。从 packages/ui-bindings/shared/CHANGELOG.md 可以看到qiankunjs/ui-shared的0.1.0-rc.2同时携带了另一条feat(qiankun): expose compartment sandbox configuration and plugins (#3160)说明该版本是一次多点并行的能力升级。消费关系随之建立qiankun主包在 packages/qiankun/package.json 的dependencies中以qiankunjs/single-spa: workspace:^引入该包作为其应用/ parcel 生命周期路由器的唯一实现来源。二、vendor 基线从哪里来如何落地根据 packages/single-spa/README.md 的 Fork baseline 一节本次 vendor 化的基线非常明确上游single-spa/single-spa的7.0分支锁定提交ce0f925a对应上游 tagv7.0.0-beta.13。导入范围src/、spec/、node-spec/、LICENSE原样verbatim搬入packages/single-spa随后“归化”到本 monorepo 的工具链。工具链替换上游的 rollup / babel / jest 配置没有带过来构建改用 Vite 8见 vite.library.config.ts类型声明用tsc测试用 vitestpackages/single-spa/vitest.config.ts。编译期常量接管上游注入的__DEV__、__PROFILE__、process.env.BABEL_ENV分别由根级 vite.library.config.ts构建和 vitest.config.ts测试提供。profile 变体暂不发布src/single-spa.profile.ts与src/devtools/profiler-api.ts保留在源码树中但__PROFILE__被编译为false即该变体当前不构建、不发布。从源码结构看这是一个“源码完整、配置重写、语义冻结”的 fork上游逻辑一行不动只有构建与测试环境被整体切换。三、核心行为分歧整体回退bootstrap → init重命名这是本次 vendor 化最值得关注、也是 README 明确定义的刻意分歧。上游 single-spa 在 7.0 中把bootstrap生命周期改名为init对应上游 PR #1307 / #1333而本 fork整批发回退坚持使用纯 v6 词汇且不提供任何init别名。具体落在源码上的表现生命周期命名bootstrap是应用和 parcel 唯一被识别的生命周期名一个 v7 风格的init导出会被忽略——正如 v6 忽略未知字段一样。API 与状态恢复parcel.bootstrapPromise、setBootstrapMaxTime与timeouts.bootstrap键回归initPromise、setInitMaxTime、timeouts.init不存在。对应实现见 packages/single-spa/src/applications/timeouts.ts 的setBootstrapMaxTime。状态枚举回迁NOT_BOOTSTRAPPED/BOOTSTRAPPING恢复为AppOrParcelStatus的成员名同时作为getStatus()的原始字符串返回值v7 的NOT_INITIALIZED/INITIALIZING字符串在本 fork 中不存在。可见 packages/single-spa/src/applications/app.helpers.ts、packages/single-spa/src/lifecycles/bootstrap.ts 与 packages/single-spa/src/lifecycles/load.ts。错误文案相关错误信息文本全部回到 bootstrap 词汇。测试同步迁移vendor 过来的上游 spec 也随源码一并改回 bootstrap 词汇。README 明确给出了回退的理由qiankun 生态建立在 bootstrap 词汇之上没有理由为此破坏生态。若上游未来发布仍携带该重命名的稳定版 v7届时再评估对齐在那之前本 fork 不追踪该变更。四、不可破坏的不变量契约README Invariant contracts 一节列出的契约是本次 vendor 化的底线也是 qiankun 与 wider ecosystem 依赖的兼容性承诺事件流所有single-spa:*window 事件single-spa:before-routing-event、single-spa:routing-event、single-spa:no-app-change、single-spa:first-mount等必须原样保留——qiankun 与外部生态都在监听它们。调试钩子window.__SINGLE_SPA_DEVTOOLS__single-spa-inspector 支持保持不变。API 面第一阶段内公开 API 与类型签名与上游基线保持 1:1唯一例外就是上述 bootstrap 命名回退。依赖图位置零运行时依赖该包位于工作区依赖图的最底层严禁 importqiankunjs/shared、qiankunjs/sandbox或qiankunjs/loader。这一约束同样记录在 AGENTS.mdqiankun → single-spa是 vendored forkzero deps、位于依赖图底部。五、本 fork 现在拥有的语义两处语义从此归 fork 所有urlRerouteOnlyqiankun 直接透传该选项其实现与语义现在都在本 fork 内详细文档见 docs/api/start.md。单实例假设single-spa 本质是一个有状态的路由单例。如果同一页面同时加载本 fork 的 ESM 与 CJS 构建或与本 fork 之外独立安装的 npmsingle-spa混用会静默产生两个相互独立的路由器——两套 history 补丁、两套事件流、两个started标志。README 明确警告不要这样做。这一约束在 qiankun 官方文档中同样被强调docs/api/types.md 指出loadMicroApp返回的句柄是来自qiankunjs/single-spa的Parcel并要求从该包导入路由辅助函数绝不从独立的single-spa包导入否则会建立第二个独立路由器docs/ecosystem/vue.md 亦以qiankunjs/single-spa为基准列举了getStatus()的完整状态集合。六、qiankun 主包如何消费这个 fork从源码引用看qiankun 主包对qiankunjs/single-spa的消费覆盖了从注册、启动到错误处理的全链路packages/qiankun/src/apis/registerMicroApps.ts从 fork 导入registerApplication与start以startSingleSpa别名使用并引用StartOpts类型。packages/qiankun/src/apis/loadMicroApp.ts导入mountRootParcel与AppOrParcelStatus用ParcelConfigObject类型约束配置其中 L38-L40 通过getStatus() ! AppOrParcelStatus.LOAD_ERROR判断历史实例是否损坏可见状态枚举在业务逻辑中被实际使用。packages/qiankun/src/apis/effects.ts从 fork 导入getMountedApps、navigateToUrl。packages/qiankun/src/apis/errorHandler.ts直接 re-export fork 的addErrorHandler/removeErrorHandler。packages/qiankun/src/index.ts对外 re-exportnavigateToUrl保持公共 API 形状。packages/qiankun/src/types.ts复用 fork 的Parcel、RegisterApplicationConfig、LifeCycles等类型。对应测试也直接 mock / 导入该包packages/qiankun/src/apis/tests/effects.test.ts 以vi.mock(qiankunjs/single-spa)隔离单测packages/qiankun/src/apis/tests/registerMicroApps.test.ts 直接使用triggerAppChange。这些测试既验证了 fork 的 API 形状也构成了对外部依赖的最小契约。七、与上游的同步工作流README Upstream sync 一节给出了后续吸收上游修复的完整流程预期同步频率≈零因上游已处于休眠状态git remote add single-spa-upstream https://github.com/single-spa/single-spa.git git fetch single-spa-upstream 7.0 git log ce0f925a..single-spa-upstream/7.0 --oneline # review the delta # apply selected commits manually onto packages/single-spa/src/ (path prefixes differ)吸收任何提交后需要更新 README 中的基线说明一旦与上文的行为分歧列表冲突以分歧列表为准。八、升级到 qiankun 3.0 的实践建议结合变更记录与仓库现状升级时需注意路由辅助函数必须从qiankunjs/single-spa导入不要从独立的single-spanpm 包导入否则会触发 fork 的单实例假设违规双路由。生命周期词汇不变你的应用与 parcel 仍应使用bootstrap/mount/unmountv7 风格的init在本 fork 中不被识别。状态字符串兼容getStatus()返回的仍是NOT_BOOTSTRAPPED、BOOTSTRAPPING等 v6 字符串基于这些状态做的 UI 判断无需改动。校验方式可阅读 packages/single-spa/README.md 的分歧清单与 packages/single-spa/CHANGELOG.md并运行pnpm --filter qiankunjs/single-spa run testvitest 配置说明见 packages/single-spa/vitest.config.ts确认 fork 行为符合预期。结语.changeset/auto-9d70d5e.md虽只是一条发布说明背后却是 qiankun 3.0 在路由内核上的一次关键收敛把 single-spa 7.0 以qiankunjs/single-spa的形式 vendor 进 monorepo冻结基线、回退init重命名、守住事件流与 API 契约从而让 qiankun 的生态词汇与行为预期在 3.0 时代继续保持稳定。对于微前端平台的维护者而言这份 fork 的 README 与源码就是最权威的兼容性契约文档。赞分享前端微前端【免费下载链接】qiankun Blazing fast, simple and complete solution for micro frontends.项目地址https://gitcode.com/gh_mirrors/qi/qiankun点击查看免费下载相关推荐G-Helper 风扇调校指南从一键校准到自定义曲线的完整实操G Helper 风扇调校指南从一键校准到自定义曲线的完整实操 如果你的华硕笔记本要么风扇呼呼满速、要么温度上去了转速却纹丝不动多半不是硬件坏了而是转速曲前端微前端Midscene.js3个步骤让AI为你完成所有UI自动化测试Midscene.js3个步骤让AI为你完成所有UI自动化测试 你是否每天都要面对重复的浏览器操作、繁琐的移动端测试或者复杂的表单填写任务Midscene人工智能AI Agent测试GUI 自动化浏览器控制测试智能体ABigSurvey中的强化学习综述从游戏AI到机器人控制的完整指南ABigSurvey中的强化学习综述从游戏AI到机器人控制的完整指南 ABigSurvey是一个收录了1000篇自然语言处理NLP和机器学习ML领域上一篇DB-GPT 模型提供方完全指南:OpenAI、DeepSeek、Qwen、SiliconFlow、Ollama 与 vLLM 的配置与选型下一篇D2Admin前端状态管理Vuex模块化最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表