npx @deepseek-ai/dsh web 跑的是哪个版本?DeepSeek Harness 缓存与版本漂移治理
npx @deepseek-ai/dsh web 每次都会从 npm 解析包,但会复用本地缓存——所以出现「命令没变、版本对不上」时,问题基本不在 DSH,而在 npx 缓存与多份安装。 本文把缓存位置、查版本命令、清缓存与锁版本写法一次讲清。
概览:dsh 版本对不上的三种成因
版本对不上有三种成因:npx 命中了缓存里的旧副本、本机存在多份安装、shell 缓存了命令路径。 三种都能用命令验证,不用卸载重装(来源)。判断顺序建议从「查当前版本」开始,先定位事实,再决定清哪一处缓存。
为什么 npx 会跑到旧版本:dsh 的两处缓存不是一处
npx 相关有两个可清的位置,性质完全不同:~/.npm/_npx 是 npx 的临时运行环境,~/.npm/_cacache 是 npm 的下载缓存。 很多人只清了后者,于是旧副本照旧生效(来源)。
| 缓存位置 | 存什么 | 清理命令 |
|---|---|---|
~/.npm/_npx | npx 临时运行环境(包与可执行入口) | rm -rf ~/.npm/_npx |
~/.npm/_cacache | npm 下载缓存(tarball 数据) | npm cache clean --force |
npm cache clean --force 不会清 ~/.npm/_npx——这是两处独立目录,只清一处往往看不到任何变化。
怎么查 npx @deepseek-ai/dsh web 当前跑的是哪个版本
查版本要分三层问:npx 解析到的版本、全局安装的版本、当前终端实际命中的 dsh。 三条命令各回答一个问题(来源):
- 查 npx 解析到的启动器版本:
npx @deepseek-ai/dsh --version,预期:输出版本号;它只在参数边界之前打印启动器版本(来源); - 查全局安装的版本:
dsh --version,预期:输出版本号;若提示 command not found,说明你从头到尾都是 npx 方式,没有全局实体; - 查所有可见的 dsh 路径:
which -a dsh,预期:列出全部命中路径;出现两行以上就说明本机有多份安装(nvm 各 Node 版本各一份、pnpm 或 Homebrew 装了一份)。
两个版本号不一致时,优先怀疑 shell 的命令路径缓存:执行 hash -r(zsh 用 rehash)后再复核一遍。
清 npx 缓存,强制 dsh 解析到最新版
要彻底断掉旧副本,按「清两处缓存 → 用 @latest 重跑」的顺序做,一步都不能省(来源)。
- 清 npm 下载缓存:
npm cache clean --force,预期:命令返回成功;此后重新下载不再复用旧 tarball; - 清 npx 临时运行环境:
rm -rf ~/.npm/_npx,预期:目录被删除,下次运行 npx 会重新解析并下载; - 用最新标签重跑:
npx -y @deepseek-ai/dsh@latest web
预期:终端显示重新下载,之后启动的即当前最新版;
4. 复核:npx @deepseek-ai/dsh --version,预期:版本号与官方 Releases 页最新版一致。
想确认官方最新版号,去官方 Releases 页或 npm 包页看,不要凭记忆写版本号——任何文章里写死的版本号都会过期(来源)。
锁定 dsh 版本:把 @latest 换成确切版本号
固定版本与追最新版只差包名的写法:@latest 是最新标签,换成版本号就是锁定。 这在排查「新版引入的问题」或团队统一环境时特别有用:
- 到官方 Releases 页复制确切版本号;
- 用锁定写法启动:
npx @deepseek-ai/dsh@1.3.9 web
预期:npx 按该版本解析并启动,不再自动追最新;
3. 验证:npx @deepseek-ai/dsh@1.3.9 --version,预期:输出的版本号与你写的完全一致;
4. 想回到追最新:去掉版本号或改回 @latest 即可。
版本号怎么选、rc 版与稳定版的取舍,见《DeepSeek Harness 版本怎么选?dsh 版本号怎么看》。
全局安装与 npx 混用时的 dsh 排查顺序
同一台机器同时有全局安装和 npx 缓存时,最容易出现「更新了全局版、终端却还在跑缓存副本」。 按固定顺序排查,别跳步(来源):
which -a dsh列全部路径,预期:确认到底装了几份、各在哪;hash -r清 shell 路径缓存,预期:再执行which dsh结果可能变化;- 对比
dsh --version与npx @deepseek-ai/dsh --version,预期:找出旧的那一份; - 旧的是全局安装 →
npm update -g @deepseek-ai/dsh;旧的是 npx 缓存 → 按上一节清缓存;两者都旧 → 先更新全局,再清 npx 缓存。
完整的「更新了版本没变」排查法见《dsh 更新了版本没变怎么办》。
DSH plugin 版本也一起对齐:交给 Hub 可视化管
本体版本理清之后,DSH插件版本建议交给界面管——版本号、可更新状态、更新确认都在一处显示(来源)。 装好 DSH Plugin Hub 后打开设置 → 插件市场 → 已安装,每个插件都显示当前版本与更新时间,行尾直接给「可更新」与「卸载」按钮:

与其在命令行里比对 dsh plugin list 与包版本,不如用 Hub 的已安装列表一眼看出哪些插件落后、哪些有新版本——更新前还会弹确认窗口展示将要执行的命令。访问 https://dsh-plugin.org/zh/ 即可了解详情。
常见问题
npx @deepseek-ai/dsh web 跑的是旧版,是因为 npx 复用了本地缓存——解析包时命中了 ~/.npm/_npx 里的旧副本。执行 npm cache clean --force 后重跑,或把命令写成 npx -y @deepseek-ai/dsh@latest web 显式按最新标签解析,就会重新下载最新包。
执行 npx @deepseek-ai/dsh --version 看 npx 解析到的启动器版本;如果做过全局安装,再执行 dsh --version 对比全局版本。两个数字不一致,说明本机同时存在 npx 缓存与全局安装两份 dsh,当前终端跑的是哪一个取决于 PATH 与缓存。
npm cache clean --force 只清 npm 的下载缓存(~/.npm/_cacache),不会动 npx 的临时运行环境 ~/.npm/_npx,dsh 的旧副本通常留在这两处中的后者。要彻底断掉旧副本,先 npm cache clean --force,再删 ~/.npm/_npx,然后用 @latest 重新运行一次,让 npx 重新解析并下载最新包。
锁定 dsh 版本就把 @latest 换成确切版本号,例如 npx @deepseek-ai/dsh@1.3.9 web,npx 就会按这个版本解析而不是最新标签。锁定前先到官方 Releases 页或 npm 包页确认该版本号真实存在,不要凭记忆写版本号。
dsh --version 与 npx 版本对不上,一般是本机存在多份 dsh,按三步排查:先用 which -a dsh 列出所有可见的 dsh 路径,确认是否有多份安装(nvm 各 Node 版本、pnpm、Homebrew 各一份);再执行 hash -r(zsh 用 rehash)清掉 shell 的命令路径缓存;最后分别跑 dsh --version 和 npx @deepseek-ai/dsh --version 对比,谁旧就清谁对应的缓存。
相关术语
- npx
- npx 是随 npm 一起安装的包执行器,能在不全局安装的情况下从 npm 拉取并执行某个包;它会把包缓存到本地,因此后续运行时可能复用旧副本而不是重新下载。— npm 官方文档
- @latest
- @latest 是 npm 包的最新版本标签(dist-tag),写在包名后表示按该标签解析版本;在 npx 命令里显式写 @latest 可以绕过缓存里的旧副本,强制解析当前最新发布版本。— npm 官方文档
- npx 缓存
- npx 缓存是 npx 存放临时下载包的本地目录,通常位于 ~/.npm/_npx,与 npm 的下载缓存 ~/.npm/_cacache 是两处不同位置;版本对不上时两处都需要检查。— npm 官方文档
- 启动器版本
- 启动器版本指 dsh 启动器自身的版本,用 dsh --version 或 npx @deepseek-ai/dsh --version 查看;它只在参数边界之前打印,边界之后的同名参数会交给被启动的应用解析。— dsh CLI README
来源
- npm CLI 文档 - npx· npm
- npm CLI 文档 - npm cache· npm
- dsh CLI README· deepseek-ai
- deepseek-ai/deepseek-harness Releases· GitHub
- dshplugin/dsh-plugin-hub GitHub 仓库· GitHub