VSCode终端显示系统自带Node版本的根本原因是其以non-login shell启动,未加载~/.zsh_profile中的nvm.sh,导致PATH未更新、nvm alias default失效;需将nvm初始化代码移至~/.zsh_profile末尾,设terminal.integrated.shellArgs为["-l"],并彻底退出VSCode重启。

VSCode终端显示node -v是系统自带版本,不是nvm default
Mac系统预装的/usr/bin/node会干扰nvm接管,尤其在VSCode以non-login shell启动时,它直接命中系统路径而非nvm软链。这不是nvm没生效,而是VSCode绕过了你的~/.zshrc,连nvm.sh都没加载。
- 先验证:在VSCode终端执行
which node,如果输出/usr/bin/node或/usr/local/bin/node,说明被系统版本劫持 - 检查
echo $PATH是否含$NVM_DIR/versions/node/...路径——没有就确认nvm.sh没被加载 - 别用
sudo rm -rf /usr/local/bin/node硬删,macOS SIP保护下可能失败,且重启后可能恢复
terminal.integrated.shellArgs设为["-l"]但依然无效
加了["-l"]却还是读不到~/.zsh_profile?大概率是shell初始化文件没放对位置,或者有提前退出逻辑。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- macOS Catalina及之后默认shell是zsh,login shell只读
~/.zsh_profile,不读~/.zshrc(除非你在~/.zsh_profile里显式source ~/.zshrc) - 检查
~/.zsh_profile开头是否有[[ -n $ZSH_EVAL_CONTEXT ]] && return这类防护语句——它会让login shell跳过后续内容 - nvm初始化代码必须放在
~/.zsh_profile末尾,且确保export NVM_DIR和source "$NVM_DIR/nvm.sh"都在同一文件中 - 改完后必须彻底退出VSCode(macOS右键Dock →「退出」),再重新打开,仅重启窗口不行
nvm alias default不生效,VSCode每次启动都回退到v18.x
nvm alias default只影响新打开的shell会话,但如果VSCode终端启动时PATH里已有/usr/local/bin(含旧node二进制),它就会优先匹配,完全忽略nvm。
- 执行
npm config get prefix,若返回/usr/local,说明npm被污染——运行npm config delete prefix清除 - 确认
nvm use --delete-prefix v14.21.3已执行,否则nvm拒绝切换到被prefix锁定的版本 - 在项目根目录放
.nvmrc,内容仅一行:14.21.3;同时确保~/.zsh_profile末尾有nvm use自动触发逻辑 - VSCode里不要依赖手动
nvm use,那是临时会话级操作,关掉终端就失效
launch.json调试时Node路径仍错乱
即使终端里node -v正确,F5调试仍报“找不到node”,因为launch.json进程不继承任何shell环境变量,PATH为空。
- 在
.vscode/launch.json的每个configuration里加"env"字段:{"PATH": "${env:PATH}:/Users/yourname/.nvm/versions/node/v14.21.3/bin"} - 路径必须写死,
${env:NVM_BIN}在调试器里不可用;用which node在终端里查准路径再复制 - 别用
runtimeExecutable指向/usr/bin/node——那永远是系统版本 - 如果项目用TypeScript,
typescript.tsdk也要同步指向对应Node版本下的lib路径,否则类型检查可能错乱
${env:PATH},漏一个就断链。

















