Chapter 04

启动系统:Profile、Bundle、Patch 与插件树

目标不是背 API,而是建立能从顶层设计一路推导到源码细节的心智模型。读完本章,你应该能解释“为什么这样设计”,而不仅是“代码在哪里”。

1. 配置不是参数文件,而是“插件树描述”

DSH 启动时不是硬编码 new ToolRegistry(); new SessionStore()。它把 profile 中有序 bundle、profile patch、home patch、命令行 overlay 合成配置条目,再由 Cordis Loader 挂载。

2. Profile 与 Bundle

Profile 是用户/部署级组合;Bundle 是可分发的配置层。官方 webheadless 作为模板。最底层通常是 base,往上再叠 UI 或一次性运行器。

empty entries + dsh-base bundle + profile-specific bundle(s) + profile cordis.patch.yml + $DSH_HOME/cordis.patch.yml + --patch overlay = final plugin tree

3. Patch 的设计价值

运维或用户想换模型 provider、关闭某工具、换 persistence backend,不需要 fork 源码,只 patch 对应配置 row。--dump-config 的价值就是把“机器实际启动的树”展开给你看。

4. Boot 失败为什么要整体回滚

启动过程中可能已有部分插件注册了 service/listener。若某后续插件失败而不 dispose,进程会留下半初始化状态。app-boot 的关键职责之一就是让构建过程具有事务式失败语义。

源码定位:App Boot · packages/boot/app-boot/README.zh.md
打开官方源码/文档