dsh plugin remove 怎么卸载插件?DSH plugin 移除命令、--profile 与验证
dsh plugin remove 的完整形态是 dsh plugin --profile <名字> remove <包名>,它会同时移除 pnpm 依赖与那一层配置——官方示例里 dsh plugin --profile demo remove dsh-hello-plugin 就是把依赖和加载层一起摘掉(来源)。--profile 必填,rm、uninstall 这类别名同样成立;卸完要到 package.json 和 --dump-config 两处确认层已消失。
DSH plugin 卸载概览:删两样东西,不是删目录
卸载一个 DSH plugin 要清掉两样东西:profile 的 pnpm 依赖,以及 dsh.profile.bundles 里那一项加载层——只删其中一样都会留下隐患。 DSH插件 与 DeepSeek插件 的卸载都走同一条通道,先记结论:
dsh plugin remove一次清两样,这是推荐做法;- 手动删
node_modules目录只动文件,dependencies与bundles两份清单原样保留,profile 仍会照着清单去解析一个已经不在的包; - 内置组合包不属于 pnpm 管理范围——
@deepseek-ai/dsh-base这类包始终从 dsh 安装本体解析,remove用不到它们身上(来源)。
DSH plugin remove 命令语法:一条命令删依赖也删层
dsh plugin --profile <名字> remove <包名> 在删依赖的同时把该包从 profile 的组合包清单里摘掉,这是它和「手删目录」的本质区别(来源)。 走一遍标准流程:
- 确认要卸的包名,从已装列表里抄准确名字:
dsh plugin --profile web list
名字对不上会由 pnpm 报错并非零退出,所以别凭记忆拼包名;列表的读法见《dsh plugin list 怎么用?》。
- 执行卸载:
dsh plugin --profile web remove <包名>
-
确认输出里既有依赖被移除、也有该插件层被摘掉的迹象,而不是只打印一句 done。
-
需要时批量或按条件卸,参数照旧是 pnpm 的:
# 一次卸多个包
dsh plugin --profile web remove <包名A> <包名B>
# 只从 dependencies 里移除
dsh plugin --profile web remove <包名> -P
pnpm remove 会把包从 node_modules 与项目的 package.json 中移除,可用 -D、-O、-P 指定只从对应的依赖分组移除(来源)。
DSH plugin remove 卸的是哪个 profile:--profile 必填,别名 rm 与 uninstall 随便叫
--profile 是必填参数且无短写,它决定去哪份清单上动手;而 remove 只是 pnpm 的动词之一,写成 rm、uninstall、un 都等价(来源)。 三个要点:
-
插件是装在 profile 上的,不是全局的。
dsh plugin --profile web remove <包名>只动$DSH_HOME/profiles/web,装在别的 profile 里的同一个插件不受影响。启动dsh web用的就是web这个 profile,卸载前先对准它。 -
四个别名等价(参数整段转发给 pnpm):
dsh plugin --profile web remove <包名>
dsh plugin --profile web rm <包名>
dsh plugin --profile web uninstall <包名>
dsh plugin --profile web un <包名>
- 本机有多个 profile 时,逐个确认再决定卸哪个:
ls ~/.dsh/profiles
DSH plugin remove 卸完怎么验证:package.json 与 --dump-config 双查
验收标准是两处都干净:profile 的 package.json 里包名应从 dependencies 和 dsh.profile.bundles 同时消失;dsh --profile web --dump-config 输出里不再出现 # == <包名> 那一层(来源)。 按顺序做四步:
- 查清单:
cat ~/.dsh/profiles/web/package.json
包名既不在 dependencies、也不在 dsh.profile.bundles 里,说明 dsh 侧的账也清了。
- 查组合树,不启动就能看到实际加载的层:
dsh --profile web --dump-config | grep -n "<包名>"
没有输出即层已消失;还有输出说明清单里仍留着这一项。
- 查 pnpm 侧是否彻底移除:
dsh plugin --profile web list | grep -n "<包名>"
- 查你自己的覆盖层:如果 profile 的
cordis.patch.yml里手写过引用该插件的行,记得一并清掉——那一层是你自己的覆盖,不由 pnpm 或 dsh 的组合包清单代为管理(来源)。
DSH plugin remove 注意事项
一句话总结:--profile 指定清单,remove 一次删依赖与层,验证要看两处。 五条提醒:
- 别手删
node_modules里的插件目录:文件没了、清单还在,profile 仍会按bundles去解析一个不存在的包; - 卸载前先停掉应用:插件正在被加载时删文件,容易留下半截状态,先退出
dsh web再卸更稳; - 内置组合包卸不掉也不该卸:
@deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app、@deepseek-ai/dsh-headless从 dsh 安装本体解析,pnpm 只管 out-of-tree 的包(来源); - 别名虽等价,脚本里统一写
remove:un这种缩写可读性差,团队协作用完整写法; - 插件的数据不跟着走:
remove清的是依赖与加载层,插件自己写在别处的数据不会自动删——要彻底清理按《DSH plugin 卸载后残留怎么彻底清理?》处理。
不想记命令?让 DSH Plugin Hub 点一下卸载
卸载插件的全部复杂度在于「两份清单要一起清」,图形界面里这一步是自动的。 装好 DSH Plugin Hub 后打开设置 → 已安装插件,找到目标插件点行尾的「卸载」,会弹出确认卸载弹窗列出插件与来源仓库,确认后才真正移除——依赖与加载层一次清干净,不会留空壳。比起在终端里对包名、查两份清单,点一下更不容易出错。

来源:DeepSeek Harness 官方文档 - 打包与安装插件、dsh CLI README、pnpm remove(pnpm rm / uninstall)命令文档
常见问题
dsh plugin remove 不会只删依赖:官方示例里 dsh plugin --profile demo remove dsh-hello-plugin 会同时移除依赖与那一层配置,不会留下一个仍被加载的空壳插件。这也是它和手动删 node_modules 目录的关键区别:手删只动了文件,两份清单还是原样。
DeepSeek Harness 没有为它提供短写:完整形态是 dsh plugin --profile <名字> remove <包名>,--profile 必填,省略会非零退出。它指定去哪个 profile 目录执行,例如 dsh plugin --profile web remove <包名> 卸的是 web profile 里的插件,不是全局的。
**是——DeepSeek Harness 在 --profile 之后把参数整段转发给 pnpm**,而 pnpm remove 的别名包括 rm、uninstall 和 un,所以 dsh plugin --profile web rm <包名> 与 dsh plugin --profile web uninstall <包名> 等价。三个写法随便用,走的还是同一条通道。
确认 DeepSeek Harness 是否还在加载它,两处一起查:profile 的 package.json 里,包名应该从 dependencies 和 dsh.profile.bundles 同时消失;再跑 dsh --profile web --dump-config,之前那个 # == <包名> 层应当不再出现。两处都干净才算卸到底。
DeepSeek Harness 启动时的引用不止 pnpm 一处,先检查 profile 自己的 cordis.patch.yml 有没有手写过引用该插件的行——那层覆盖不由 pnpm 管理,remove 不会替你清。另外要卸的是哪个 profile 也要对准:dsh web 用的是 web profile,装在别的 profile 里的插件不会被这条命令影响。
相关术语
- dsh plugin remove
- dsh plugin remove 是 DeepSeek Harness 从指定 profile 卸载插件的命令,完整形态为 dsh plugin --profile <name> remove <包名>。它同时移除 pnpm 依赖与 profile 组合包清单里的对应项,等价于在 profile 目录跑 pnpm remove 并额外维护加载层。— DeepSeek Harness 官方文档 - 打包与安装插件
- pnpm remove
- pnpm remove 是 pnpm 删除依赖的命令,会把包从 node_modules 与项目的 package.json 中移除,别名包括 rm、uninstall 和 un。dsh plugin 通道转发的正是它,因此这些别名在 dsh plugin 下同样成立。— pnpm remove(pnpm rm / uninstall)命令文档
- dsh.profile.bundles
- dsh.profile.bundles 是 profile 的 package.json 里 dsh.profile 清单中的有序组合包数组,决定启动该 profile 时按顺序叠加哪些插件层。卸载插件时它必须与 dependencies 一起被清理,否则清单会指向一个已经不在的包。— DeepSeek Harness 官方文档 - 打包与安装插件
- 内置组合包(in-box bundle)
- 内置组合包是随 dsh 安装本体分发的组合包,如 @deepseek-ai/dsh-base、@deepseek-ai/dsh-web-app、@deepseek-ai/dsh-headless。它们始终从 dsh 安装本体解析,不经 profile 的 node_modules,因此不属于 pnpm 管理的 out-of-tree 包,remove 用不到它们身上。— DeepSeek Harness 官方文档 - 打包与安装插件
来源
- DeepSeek Harness 官方文档 - 打包与安装插件· deepseek-harness
- dsh CLI README· deepseek-ai
- pnpm remove(pnpm rm / uninstall)命令文档· pnpm