VSCode调试器不继承终端环境,需在launch.json中设"runtimeExecutable": "${env:NVM_BIN}/node",并启用terminal.integrated.inheritEnv为true后完全重启VSCode。

终端里 node -v 对了,但 F5 调试还是旧版本?
这不是终端没切对,是调试器根本没读终端环境。VSCode 调试器(type: "node")启动时只抓取进程启动瞬间的环境快照,NVM_BIN、PATH 都不会从当前终端继承。
必须在项目根目录的 .vscode/launch.json 中显式写死:"runtimeExecutable": "${env:NVM_BIN}/node" —— 前提是终端里能跑通 echo $NVM_BIN 且有输出。
- 硬编码路径(如
/Users/x/.nvm/versions/node/v18.19.0/bin/node)换机器就崩,别用 -
settings.json里的nodePath已被弃用,对 launch.json 无效 - 如果用
npm run dev启动服务,runtimeExecutable不起作用,此时全靠终端环境
新开终端还是用系统自带 node?检查 shell 初始化是否被跳过
VSCode 集成终端默认不是 login shell,~/.zshrc 或 ~/.bash_profile 里的 source ~/.nvm/nvm.sh 根本不执行。
解决方法有两个,推荐后者:
- 在
settings.json中设"terminal.integrated.inheritEnv": true,然后**完全退出 VSCode(关窗口不算)再重开** - 更稳妥:直接编辑
settings.json,补全环境变量,例如:"terminal.integrated.env.zsh": { "NVM_DIR": "/Users/you/.nvm", "PATH": "/Users/you/.nvm/bin:${env:PATH}" } - Windows PowerShell 用户需确认
$PROFILE已导入nvm.ps1,且终端 profile 明确设为 PowerShell
多个项目同时打开,怎么避免 Node 版本串?
全局设置或 shell profile 无法隔离项目级 Node 版本——它们共享同一套终端初始化逻辑。
真正可行的是工作区级配置 + 独立终端标签页:
- 每个项目根目录放独立的
.nvmrc(内容如v16.20.2),再配.vscode/settings.json和.vscode/launch.json - 为每个项目开一个终端标签页,并在该标签页里手动运行
nvm use(或装插件vsc-nvm,但它只对新建终端生效) - 不要在同一个终端里先后
nvm use 14和nvm use 18—— 后者会覆盖前者,但已运行的进程不会自动重启
临时切个 shell 调试环境变量,不用关终端重开
有时候你只是想快速进一次 bash 看 $PATH,或临时跑条 PowerShell cmdlet,没必要换默认终端。
直接在已打开的终端里输入:bash、powershell、zsh 或 cmd 回车即可启动子 shell。
- 子 shell 中运行完命令后,输入
exit就退回原 shell,原有会话状态保留 - 注意旧版 Git Bash 启动子 shell 会重置
PWD,可手动cd -返回上一个目录 - 这个技巧对对比
echo $PATH在不同 shell 下的差异特别有用
最易被忽略的一点:VSCode 的 TypeScript 语言服务、ESLint 插件等后台进程,用的不是你终端里那个 node,而是 VSCode 主进程启动时加载的 Node 环境 —— 它们不响应 nvm use,也不读 .nvmrc。要让这些功能也用对版本,只能靠完全重启 VSCode 或换用 fnm 这类更轻量、支持 prehook 的管理器。











