跳到正文
MyDSH我的 DSH 实战笔记
English
独立维护,非DeepSeek官方;与mydsh.dev等其他MyDSH站点无关联。

首页/开发者与插件开发/开发环境与脚手架

从零写一个最小插件:三个文件跑到 apply() 被调用

想给自己写个插件,翻文档不知道该建几个文件、哪个字段是必须的。

已核验版本与环境核验日期2026-11-14
宿主
0.1.2-alpha.5源码checkout
方式
隔离DSH_HOME + file: 协议安装
核验日期
2026-11-14

可复制指令

dsh plugin --profile web add "file:C:/path/to/minplug"

三个文件就够。下面这份是实测跑通的,可以直接抄。

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 追加同名项。

两步验证,缺一不可

  1. 验证合成:--dump-config 里应出现 # == dsh-plugin-hello 段与 - id: hello-world。
  2. 验证真加载:在apply里写个文件(appendFileSync),启动后看文件有没有出现。
这两步必须分开。我第一次只做了第一步,看到dump-config有条目就以为成功了——但web默认不打info日志,apply有没有执行完全看不出来。只有让它留下可观测副作用才拿到证据。dump-config有条目 ≠ apply被调用。

id 与 name 别混

patch里 id: hello-world 是你自己起的定位标识,name: dsh-plugin-hello 才是模块名。后续想patch这个条目,用的是id。生态里这两个经常被混着说。

怎么算跑通

照着逐条对,全过才算完成。有一条没过,先解决它再往下。

  • dump-config里有 # == 你的包名 段
  • apply里的副作用文件真的出现了
  • id与name分别写对,没混用

会失败在哪

现象 / 原因 / 怎么办,按实际踩到的顺序写。

现象原因怎么办
dump-config里没有新条目dsh.bundle.patch没写或路径错确认package.json里有dsh.bundle.patch且指向存在的文件
有条目但apply没执行组件解析失败或name写错把name改成包名字符串,别写相对路径

来源

标「已核验」的,来自本站实跑;标「公开资料整理」的,逐条附出处。