dsh plugin remove 怎么卸载插件?DSH plugin 移除命令、--profile 与验证

卸载与清理发布于 2026-09-12作者: DeepSeek Plugin 插件市场
DeepSeek HarnessDSH plugindsh plugin remove卸载插件profile
dsh plugin remove 是卸载插件的 DSH 命令,完整形态 dsh plugin --profile <名字> remove <包名>,会同时移除 pnpm 依赖与 profile 的加载层;别名 rm、uninstall 同样成立。卸完到 package.json 与组合树两处验证。

dsh plugin remove 的完整形态是 dsh plugin --profile <名字> remove <包名>,它会同时移除 pnpm 依赖与那一层配置——官方示例里 dsh plugin --profile demo remove dsh-hello-plugin 就是把依赖和加载层一起摘掉(来源)。--profile 必填,rmuninstall 这类别名同样成立;卸完要到 package.json--dump-config 两处确认层已消失。

DSH plugin 卸载概览:删两样东西,不是删目录

卸载一个 DSH plugin 要清掉两样东西:profile 的 pnpm 依赖,以及 dsh.profile.bundles 里那一项加载层——只删其中一样都会留下隐患。 DSH插件 与 DeepSeek插件 的卸载都走同一条通道,先记结论:

  1. dsh plugin remove 一次清两样,这是推荐做法;
  2. 手动删 node_modules 目录只动文件,dependenciesbundles 两份清单原样保留,profile 仍会照着清单去解析一个已经不在的包;
  3. 内置组合包不属于 pnpm 管理范围——@deepseek-ai/dsh-base 这类包始终从 dsh 安装本体解析,remove 用不到它们身上(来源)。

DSH plugin remove 命令语法:一条命令删依赖也删层

dsh plugin --profile <名字> remove <包名> 在删依赖的同时把该包从 profile 的组合包清单里摘掉,这是它和「手删目录」的本质区别(来源)。 走一遍标准流程:

  1. 确认要卸的包名,从已装列表里抄准确名字:
bash
dsh plugin --profile web list

名字对不上会由 pnpm 报错并非零退出,所以别凭记忆拼包名;列表的读法见《dsh plugin list 怎么用?》。

  1. 执行卸载
bash
dsh plugin --profile web remove <包名>
  1. 确认输出里既有依赖被移除、也有该插件层被摘掉的迹象,而不是只打印一句 done。

  2. 需要时批量或按条件卸,参数照旧是 pnpm 的:

bash
# 一次卸多个包
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 的动词之一,写成 rmuninstallun 都等价(来源)。 三个要点:

  1. 插件是装在 profile 上的,不是全局的dsh plugin --profile web remove <包名> 只动 $DSH_HOME/profiles/web,装在别的 profile 里的同一个插件不受影响。启动 dsh web 用的就是 web 这个 profile,卸载前先对准它。

  2. 四个别名等价(参数整段转发给 pnpm):

bash
dsh plugin --profile web remove <包名>
dsh plugin --profile web rm <包名>
dsh plugin --profile web uninstall <包名>
dsh plugin --profile web un <包名>
  1. 本机有多个 profile 时,逐个确认再决定卸哪个:
bash
ls ~/.dsh/profiles

DSH plugin remove 卸完怎么验证:package.json 与 --dump-config 双查

验收标准是两处都干净:profile 的 package.json 里包名应从 dependenciesdsh.profile.bundles 同时消失;dsh --profile web --dump-config 输出里不再出现 # == <包名> 那一层(来源)。 按顺序做四步:

  1. 查清单
bash
cat ~/.dsh/profiles/web/package.json

包名既不在 dependencies、也不在 dsh.profile.bundles 里,说明 dsh 侧的账也清了。

  1. 查组合树,不启动就能看到实际加载的层:
bash
dsh --profile web --dump-config | grep -n "<包名>"

没有输出即层已消失;还有输出说明清单里仍留着这一项。

  1. 查 pnpm 侧是否彻底移除
bash
dsh plugin --profile web list | grep -n "<包名>"
  1. 查你自己的覆盖层:如果 profile 的 cordis.patch.yml 里手写过引用该插件的行,记得一并清掉——那一层是你自己的覆盖,不由 pnpm 或 dsh 的组合包清单代为管理(来源)。

DSH plugin remove 注意事项

一句话总结:--profile 指定清单,remove 一次删依赖与层,验证要看两处。 五条提醒:

  1. 别手删 node_modules 里的插件目录:文件没了、清单还在,profile 仍会按 bundles 去解析一个不存在的包;
  2. 卸载前先停掉应用:插件正在被加载时删文件,容易留下半截状态,先退出 dsh web 再卸更稳;
  3. 内置组合包卸不掉也不该卸@deepseek-ai/dsh-base@deepseek-ai/dsh-web-app@deepseek-ai/dsh-headless 从 dsh 安装本体解析,pnpm 只管 out-of-tree 的包(来源);
  4. 别名虽等价,脚本里统一写 removeun 这种缩写可读性差,团队协作用完整写法;
  5. 插件的数据不跟着走remove 清的是依赖与加载层,插件自己写在别处的数据不会自动删——要彻底清理按《DSH plugin 卸载后残留怎么彻底清理?》处理。

不想记命令?让 DSH Plugin Hub 点一下卸载

卸载插件的全部复杂度在于「两份清单要一起清」,图形界面里这一步是自动的。 装好 DSH Plugin Hub 后打开设置 → 已安装插件,找到目标插件点行尾的「卸载」,会弹出确认卸载弹窗列出插件与来源仓库,确认后才真正移除——依赖与加载层一次清干净,不会留空壳。比起在终端里对包名、查两份清单,点一下更不容易出错。

确认卸载

来源:DeepSeek Harness 官方文档 - 打包与安装插件dsh CLI READMEpnpm remove(pnpm rm / uninstall)命令文档

常见问题

dsh plugin remove 会不会只删依赖、留下插件继续在启动时加载?

dsh plugin remove 不会只删依赖:官方示例里 dsh plugin --profile demo remove dsh-hello-plugin 会同时移除依赖与那一层配置,不会留下一个仍被加载的空壳插件。这也是它和手动删 node_modules 目录的关键区别:手删只动了文件,两份清单还是原样。

dsh plugin remove 的完整命令怎么写,--profile 可以省略吗?

DeepSeek Harness 没有为它提供短写:完整形态是 dsh plugin --profile <名字> remove <包名>,--profile 必填,省略会非零退出。它指定去哪个 profile 目录执行,例如 dsh plugin --profile web remove <包名> 卸的是 web profile 里的插件,不是全局的。

dsh plugin uninstall 和 dsh plugin rm 是同一个命令吗?

**是——DeepSeek Harness 在 --profile 之后把参数整段转发给 pnpm**,而 pnpm remove 的别名包括 rm、uninstall 和 un,所以 dsh plugin --profile web rm <包名> 与 dsh plugin --profile web uninstall <包名> 等价。三个写法随便用,走的还是同一条通道。

卸载插件后怎么确认它真的不再被 DeepSeek Harness 加载了?

确认 DeepSeek Harness 是否还在加载它,两处一起查:profile 的 package.json 里,包名应该从 dependencies 和 dsh.profile.bundles 同时消失;再跑 dsh --profile web --dump-config,之前那个 # == <包名> 层应当不再出现。两处都干净才算卸到底。

为什么我用 dsh plugin remove 卸掉插件后,启动还是提示找不到某个包?

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 官方文档 - 打包与安装插件

来源