配置系统最容易踩坑的地方

Profile、Bundle、Plugin 有什么区别?

理解三层职责、配置叠加顺序,以及为什么 Cordis Patch 不是深合并。

官方事实适用 0.1.0-rc.511 分钟核验于 2026-08-14

这三个名词分别回答“运行哪套组合”“分发哪组配置”“执行哪段能力代码”。

Profile

Profile 位于 $DSH_HOME/profiles/<name>,是一个具名的可运行组合。它保存 Bundle 清单、外部插件依赖和自身 cordis.patch.yml

Bundle

Bundle 通过 npm 包分发一组 Cordis 配置条目,并在 package.jsondsh.bundle.patch 字段声明 Patch 文件。

Plugin

Plugin 是实际向 Cordis ctx 注册服务、事件、工具或其他能力的模块。Bundle 可以加载多个 Plugin,一个 Profile 也可以组合多个 Bundle。

配置叠加顺序

后应用者胜出:

  1. Profile manifest 中的 Bundle,按列表顺序;
  2. Profile 的 cordis.patch.yml
  3. Home 级 $DSH_HOME/cordis.patch.yml
  4. 命令行 --patch,按参数顺序。
dsh --profile web --dump-default-config
dsh --profile web --dump-config
dsh --profile web --patch ./extra.cordis.yml --dump-config

关键警告:不是深合并

Patch 会替换目标条目的整个 config。如果原配置里还有端口、运行时表达式或其他字段,只覆盖其中一个键也可能把其余字段一起删除。

用字面 config 替换含 !!js 的条目时,还可能让 --port 等应用参数不再生效。修改后一定要运行 --dump-config 检查最终结果。

安装与移除外部插件

dsh plugin --profile my-profile add <package-or-git-spec>
dsh plugin --profile my-profile remove <package>

pnpm 10+ 默认阻止 Git 源码依赖的 prepare。加入 allowBuilds 等于允许包在 Agent sandbox 之外执行安装时代码;只应允许可信来源,并 pin commit。

证据与修订

一手来源

本页叙事经过压缩;命令、行为与风险边界以以下官方源码或文档为准。