npm install -g 后命令找不到,本质是nvm切换node版本后全局bin软链接未更新,仍指向旧版本node_modules;需执行npm rebuild -g刷新软链,确认prefix/bin在path中,并重启vscode以同步环境变量。

npm install -g 后命令在终端里找不到?软链没重建
Node 版本升级(比如用 nvm use 20.12.0)后,npm install -g 装的命令(如 eslint、typescript)突然报 command not found,不是 npm 没装成功,而是全局 bin 目录下的软链接仍指向旧 Node 版本的 node_modules,而新版本下该路径已失效。
- 验证方式:运行
which eslint,输出路径若含v18.17.0或其他旧版本号,就确认是软链残留问题 -
npm全局安装时,会在prefix/bin下为每个包建软链,目标是prefix/lib/node_modules/xxx/bin/xxx.js;但切换 Node 版本后,prefix可能变(nvm 下是~/.nvm/versions/node/v20.12.0),而旧软链还指着 v18 的lib目录 - 别手动删软链再重装——
npm install -g默认不会覆盖已有软链,除非加--force或先卸载
nvm 切换后如何强制刷新全局软链
nvm 本身不自动重建软链,必须显式触发。关键不是重装包,而是让 npm 重新扫描并同步当前 prefix 下的 bin 目录。
ZenHeart zenlink 与 zenlink-mcp 为 OpenClaw,涵盖安装、MCP 注册、钩子接线、入站轮询及升级维护。
- 先确认当前生效的 prefix:
npm config get prefix,输出应为类似/home/user/.nvm/versions/node/v20.12.0 - 执行
npm rebuild -g—— 它会遍历prefix/lib/node_modules下所有包,重新生成prefix/bin中的软链(注意:仅对含bin字段的包生效) - 如果某些包(如
typescript)仍不出现,单独执行npm install -g typescript --force强制覆盖软链 - macOS/Linux 用户还需检查
prefix/bin是否在$PATH中:运行echo $PATH | grep "$(npm config get prefix)/bin",缺失则补export PATH="$(npm config get prefix)/bin:$PATH"到 shell 配置文件
VSCode 终端里软链生效了,但编辑器提示 still not found
这是 VSCode 编辑器进程和终端环境变量错位的典型表现:终端里 which 找得到,但 ESLint 插件、TypeScript 语言服务等依赖 process.env.PATH 的组件却读不到更新后的 prefix/bin。
- 根本原因:VSCode 启动时固化了环境快照,即使你已在终端里执行
nvm use并刷新了 PATH,编辑器主进程也不会自动继承 - 最稳解法:完全退出 VSCode(macOS Dock 右键 → Quit;Windows 任务管理器结束所有
Code.exe),再从终端执行code .启动——这样它会加载当前 shell 的完整环境 - 不要依赖
terminal.integrated.env.*手动拼 PATH:这会覆盖 shell 原有配置,反而破坏 nvm 的动态 PATH 注入逻辑 - 验证插件是否真读到新路径:打开 VSCode 开发者工具(
Help → Toggle Developer Tools),执行console.log(process.env.PATH),确认输出含当前prefix/bin
Windows 上 nvm-windows 升级后软链指向 C:\Users\xxx\AppData\Roaming\npm
nvm-windows 默认把全局包装进系统级 %APPDATA%\npm,而非每个 Node 版本独立目录。升级后软链不丢,但可能指向错误版本的 node_modules,尤其当多个 Node 版本共用同一 global prefix 时。
- 先查真实 prefix:
npm config get prefix,若输出是C:\Users\xxx\AppData\Roaming\npm,说明没走 nvm 的 per-version 模式 - 强制切到 per-version 模式:运行
nvm root确认 nvm 安装路径(如C:\nvm),然后执行nvm use 20.12.0,再立刻运行npm config set prefix "C:\nvm\v20.12.0" - 接着清空旧全局 bin:
del /q "%APPDATA%\npm\*"(CMD)或Remove-Item "$env:APPDATA\npm\*" -Recurse -Force(PowerShell) - 最后重装关键包:
npm install -g eslint typescript,此时软链会落在C:\nvm\v20.12.0\bin下










