三个文件就够。下面这份是实测跑通的,可以直接抄。
1. package.json
{
"name": "dsh-plugin-hello",
"version": "0.0.1",
"type": "module",
"main": "lib/index.js",
"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
}2. cordis.patch.yml
# 往 profile 根插入一条条目
- insert:
- id: hello-world
name: 'dsh-plugin-hello'3. lib/index.js
export const name = 'dsh-plugin-hello'
export function apply(ctx) {
// 你的逻辑
}装进隔离环境
dsh plugin --profile web add "file:C:/path/to/minplug"
实测3.1秒完成。package.json的 dependencies 写入 "dsh-plugin-hello": "file:C:/...",bundles 追加同名项。
两步验证,缺一不可
- 验证合成:
--dump-config里应出现# == dsh-plugin-hello段与- id: hello-world。 - 验证真加载:在apply里写个文件(appendFileSync),启动后看文件有没有出现。
这两步必须分开。我第一次只做了第一步,看到dump-config有条目就以为成功了——但web默认不打info日志,apply有没有执行完全看不出来。只有让它留下可观测副作用才拿到证据。dump-config有条目 ≠ apply被调用。
id 与 name 别混
patch里 id: hello-world 是你自己起的定位标识,name: dsh-plugin-hello 才是模块名。后续想patch这个条目,用的是id。生态里这两个经常被混着说。