DSH plugin 卸载失败怎么办?dsh plugin remove 报错与 DeepSeek Harness 强制清理

卸载与清理发布于 2026-08-21作者: DSH Plugin 插件中心
DSH pluginDeepSeek Harness卸载失败dsh plugin remove强制清理
DSH plugin 卸载失败多为插件包损坏或依赖冲突,先看 dsh plugin remove 的报错定位原因;不行就手动删 profile 里的依赖声明与 bundles 兜底,删完重启 dsh web 验证插件不再加载。

DSH plugin 卸载失败,先看 dsh plugin remove 的报错定位原因,再按「命令卸载 → 手动清理 → 重启验证」的次序兜底,删完记得重启确认。

概览

卸载失败多半是插件包或依赖的问题,不是命令写错。 处理思路就三步:读报错、手动清、重启验。DSH 还在开发者预览阶段,文件布局可能调整,动手前以官方文档为准(来源)。这篇把三类常见报错拆开讲,每种给了对应的手动清理步骤,最后是验证清单——按顺序来,别一上来就删整个目录,先搞清楚是包坏了还是依赖缠住了。另外记住一点:卸载失败的根源常在安装阶段——比如 git 分发缺构建产物,这种问题修卸载不如先换安装源,一劳永逸。

dsh plugin remove 卸载失败的常见报错

卸载命令本身很简单,失败通常出在插件包或依赖状态上。 命令格式:

bash
dsh plugin --profile web remove <插件包名>

常见三类失败(来源):

  1. 插件包损坏:git 分发的插件如果没提交构建产物,pnpm 在移除时解析入口文件失败。
  2. 依赖冲突:插件被其他插件依赖,pnpm 拒绝移除,报依赖关系错误。
  3. profile 状态异常:profile 目录的 package.json 被手动改过、格式坏了,remove 直接报错。

判断是哪一类很简单:报错里带 ERR_MODULE_NOT_FOUND / entry file 字样是包损坏;带 depends on / peer 字样是依赖冲突;带 JSON / parse 字样是 profile 状态异常。报错定位越准,后面的手动清理就越省事。拿不准时先用 dsh plugin --profile web why <包名> 看依赖链,why 输出的内容会直接告诉你谁在依赖这个插件,再决定从哪下手。

举例对号入座:报错 ERR_MODULE_NOT_FOUND ... plugin-a/lib/index.js,说明 plugin-a 包结构不完整,多半是 git 分发没提交构建产物,处理方向是换安装源而不是修命令;报错 Cannot remove plugin-b: plugin-c depends on it,说明 plugin-c 还在引用它,先处理 plugin-c 或两者一起卸;报错 Unexpected token in package.json,说明 profile 文件被手改坏了,先备份再修格式。三条路径完全不同:包问题换源重装、依赖问题动依赖关系、文件问题修文件本身。

DSH plugin 卸载失败的手动兜底:删依赖与 bundles

命令卸不掉就手动清:先备份,再删依赖声明和覆盖层,最后可用删整个 profile 兜底。 步骤:

  1. 备份:复制一份 ~/.dsh/profiles/web,动手前留后路。
  2. 删依赖:编辑 profile 目录的 package.json,删除该插件的 dependencies 行。
  3. 删覆盖层:编辑 cordis.patch.yml,删除该插件对应的 config 行;profile 的组合包清单(dsh.profile 里的 bundles)里也删掉对应行。注意这两处要一起删:只删依赖不删配置,下次启动还会读到旧配置;只删配置不删依赖,插件还是会被装回来。
  4. 兜底:删不掉又不想要了,直接删除整个 ~/.dsh/profiles/web 目录,内置的 webheadless profile 会在下次启动时自动重建(来源)。

手动编辑是纯文本操作,用编辑器或 node -e 脚本都行;改完不用跑安装命令,重启 dsh web 时 profile 会按新声明加载。想连残留配置一起清掉的完整步骤,看《DSH plugin 卸载后残留配置、缓存怎么清》。

具体改哪几行:package.jsondependencies 里把 "@scope/plugin-a": "^1.2.0" 这行删掉;cordis.patch.yml 里把对应插件名开头的 config: 块删掉;dsh.profilebundles 列表里删掉包名。动 package.json 前先 pnpm list 确认准确包名——带 @scope/ 前缀的包名写错一个字符,删掉的就是别的插件。

DSH Plugin Hub 安装的插件卸载失败时,多半也是包本身的问题——它的插件详情页会标明来源(npm 或 GitHub),改装 npm 版本可以避免 git 分发缺构建产物的问题,Hub 内置的卸载失败也会写入通知中心便于回查。npm 与 GitHub 两种来源的差异,在发布插件的相关文章里也有说明。

清理后怎么验证 DSH plugin 卸载成功

删完重启 dsh web,确认插件能力消失、配置树干净。 验证三连:

  1. 重启 dsh web,界面类插件不再改变 UI、工具类插件不在工具列表。
  2. 执行 dsh --dump-config,确认组合后的配置树里没有该插件的行。
  3. 执行 dsh plugin --profile web why <包名>,确认依赖已经移除(来源)。

验证完如果还发现别的插件异常,多半是这个插件被它们依赖,用 why 查一遍依赖关系再决定——先别急着删,看清楚谁依赖谁。卸载相关的完整流程还可以看《DSH plugin 怎么卸载》。验证通过后,把备份的 profile 目录删掉,别让旧数据干扰下一次判断。

来源:dsh CLI README官方 Quickstart

常见问题

DSH plugin 卸载失败是什么原因?

多半是插件包或依赖的问题:git 分发的插件缺构建产物会让 pnpm 解析失败,插件被别的插件依赖会被 pnpm 拒绝移除,profile 的 package.json 被手改过也会报错。

dsh plugin remove 卸不掉怎么手动删?

先备份 ~/.dsh/profiles/web,再编辑 profile 的 package.json 删掉该插件的依赖行、cordis.patch.yml 删掉对应 config 行;还不行的兜底方案是直接删整个 profile 目录,内置的 web、headless 下次启动会自动重建。

profile 里的 bundles 是什么、怎么清理?

bundles 是 profile 里按顺序加载的组合包清单(dsh.profile 记录),手动清理时把对应插件的 bundle 行删掉即可,删错整个 profile 会被重建兜底。

卸载后怎么确认 DSH plugin 真的删干净了?

重启 dsh web,再执行 dsh --dump-config 确认配置树里没有该插件的行、dsh plugin --profile web why <包名> 确认依赖已移除。

来源