必须用工作区级.vscode/settings.json注入环境变量,不能依赖全局设置或终端自动加载;vscode集成终端默认以non-login shell启动,跳过shell初始化文件,导致nvm等工具未执行,需显式配置terminal.integrated.env.*并重启vscode,且调试需在launch.json中单独设runtimeexecutable。

必须用工作区级 .vscode/settings.json 注入环境变量,不能依赖全局设置或终端自动加载。 VSCode 不会主动读 .nvmrc,也不继承 shell 初始化逻辑,不手动配置就永远用系统默认 Node。
为什么新开终端还是跑系统自带的 node
VSCode 集成终端默认以 non-login shell 启动,跳过 ~/.zshrc、~/.bash_profile,导致 nvm 的初始化脚本(如 source ~/.nvm/nvm.sh)根本没执行。
- 验证方式:新开终端后运行
which nvm和nvm current,任一为空即失败 - 不是 bug,是 VSCode 为启动速度做的取舍
- 改
terminal.integrated.inheritEnv为true仅在部分场景生效,且必须完全退出 VSCode(不只是关窗口)再重开 - 更稳的做法是绕过 shell,直接在
.vscode/settings.json中写死 PATH
怎么让当前文件夹独享指定 Node 版本
在项目根目录建 .vscode 文件夹,放入 settings.json,内容按系统填:
- macOS / Linux:
"terminal.integrated.env.osx"或"terminal.integrated.env.linux" - Windows:
"terminal.integrated.env.windows" -
PATH值必须把目标 Node 目录放在最前面,例如"PATH": "/opt/node-v16.20.2/bin:${env:PATH}" - 加
"NODE_PATH": "/opt/node-v16.20.2/lib/node_modules"可兼容老项目对全局模块的引用 - 保存后必须重启 VSCode(不是重开终端),否则设置不加载
F5 调试仍用错版本?你漏了 launch.json
终端环境和调试器环境是两套独立快照。终端里 node -v 对了,不代表 F5 启动的进程也对。
- 必须在项目根目录的
.vscode/launch.json中显式指定:"runtimeExecutable": "${env:NVM_BIN}/node" - 前提是
${env:NVM_BIN}真实存在——即上一步终端已成功加载 nvm;否则 fallback 到系统 node - 硬编码路径如
/Users/x/.nvm/versions/node/v18.19.0/bin/node不可移植,换机器或重装 nvm 就失效 - 验证方法:在代码里写
console.log(process.version),F5 启动后看输出是否匹配预期
最容易被忽略的是:settings.json 和 launch.json 必须同时存在、同时生效。只配一半,等于白配。而且所有路径都得是当前机器真实存在的,VSCode 不做路径校验,错了一点就静默退回到系统默认。











