vscode内置终端默认以非登录shell启动,不加载shell配置文件,导致nvm、node、npm等命令不可用;需在terminal.integrated.profiles中为对应shell添加args: ["-l"]并彻底重启vscode。

VSCode 内置终端默认不加载 shell 配置,node 命令不可用是常态,不是你装错了——必须让它以登录 Shell 启动,否则 nvm、which node、npm -v 全都失效。
为什么 node 在系统终端能用,但在 VSCode 里报 command not found
macOS/Linux 下 VSCode 终端默认启动的是非登录 Shell(比如 zsh 但没带 -l 参数),跳过 ~/.zshrc 或 ~/.bash_profile 加载,导致 nvm 初始化代码、export PATH 等全都不执行。Windows 上则是 PowerShell 执行策略阻止 nvm.ps1 运行,或 PATH 没继承。
- 验证是否为登录 Shell:
echo $0(zsh 下输出-zsh才对)或shopt login_shell(bash) - 临时补救:在 VSCode 终端里手动运行
source ~/.zshrc(或对应配置文件),再试node -v - 但这只是 session 级修复,关掉终端就丢——真正要改的是 VSCode 的 terminal profile
terminal.integrated.profiles 必须加 ["-l"]
这是 macOS/Linux 用户最常漏掉的一步。VSCode 设置里搜 terminal.integrated.profiles,找到你用的 shell(比如 zsh),在对应 profile 里显式加 "args": ["-l"]:
"zsh": {
"path": "zsh",
"args": ["-l"]
}
- 改完必须完全退出 VSCode(macOS Dock 右键「退出」,Windows 任务管理器确认
Code.exe已结束),再重开 - 不要只关终端窗口,也不要点「重新加载窗口」——它不会重建 shell 环境
- Windows 用户若用 PowerShell,可设
"args": ["-NoProfile", "-ExecutionPolicy", "RemoteSigned"],但更稳的做法是把terminal.integrated.defaultProfile.windows改成Command Prompt
nvm 激活了但 which node 还指向系统版
即使 nvm current 显示 v20.15.0,如果 which node 返回 /usr/bin/node,说明 nvm.sh 没生效,或者 NVM_DIR 路径错、初始化代码被注释掉了。
- 检查
~/.zshrc是否含这两行(顺序不能反):export NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" - 确认
$NVM_DIR/nvm.sh文件真实存在,权限可读 - 改完配置后仍需重启 VSCode,或从系统终端执行
code .启动,才能确保环境变量完整继承
Windows 上 node 可用但调试时版本不对
VSCode 调试器和终端可能调用不同 node:终端走的是用户 PATH,调试器默认按系统 PATH 顺序找,而 Windows 安装时若勾选了「Add to PATH」但装在 C:Program Files
odejs,有时会被系统 PATH 里的旧路径覆盖。
- 在
launch.json中强制指定路径:"runtimeExecutable": "C:\Program Files\nodejs\node.exe"(注意双反斜杠) - 在代码里加
console.log(process.execPath),对比终端输出和调试器里打印的路径是否一致 - 避免中文/空格路径:哪怕重装 Node.js,也选
C: odejs这类干净路径,否则npm可能静默失败
最容易被忽略的其实是「重启」这件事——改了 shell 配置、PATH、nvm 设置,不彻底退出 VSCode,内置终端永远读不到新环境。别信「重新加载窗口」,它骗人。











