VS Code找不到node根本原因是其启动时未加载shell配置文件(如~/.zshrc),导致PATH缺失;需macOS/Linux下改terminal.integrated.shellArgs为["-l"]并彻底重启,Windows则检查系统PATH是否含Node安装路径。

VS Code 找不到 node 不是配置问题,是环境没继承
终端里能跑 node -v,但 VS Code 里报 command not found: node,99% 是它压根没加载你的 shell 初始化文件(比如 ~/.zshrc 或 ~/.bash_profile),不是插件或设置错了。
- macOS/Linux:改完
~/.zshrc后别只source,必须彻底退出 VS Code,再从终端执行code .启动——否则 PATH 还是旧的 - Windows:检查系统环境变量 PATH 是否含
C:\Program Files\nodejs\;没加就手动添,或者重装 Node.js 并**务必勾选 “Add to PATH”** - 验证方式:打开 VS Code 内置终端(
Ctrl + `),直接输node -v—— 没输出就别碰launch.json,全是白搭
launch.json 的 program 字段填错,断点永远不生效
program 是调试器唯一认的入口,填错路径、混用源码和编译后文件、忽略工作目录,断点就停不住。
- 单文件临时调试:用
"program": "${file}"(注意不是${fileBasename}) - TypeScript 项目:必须指向生成后的
.js文件,比如"program": "${workspaceFolder}/dist/server.js",同时确保tsconfig.json里开了"sourceMap": true,且.js.map和.js在同一目录 - ESM 项目:
package.json必须有"type": "module",否则调试器按 CommonJS 解析,import路径全错 - 加
"cwd": "${workspaceFolder}"显式声明工作目录,避免require('./config')因路径解析失败而报Cannot find module
用 nodemon 或 ts-node 调试时断点失效
这类工具接管了进程启动逻辑,VS Code 默认的 launch 模式无法稳定附加,硬配 runtimeExecutable 容易断连或跳过断点。
-
nodemon:不要在launch.json里设runtimeExecutable指向它;改用attach模式——终端先跑nodemon --inspect-brk src/server.js,再在launch.json新增一个"request": "attach"配置连过去 -
ts-node:用"type": "pwa-node"(新版推荐),配"runtimeExecutable": "ts-node",并加"runtimeArgs": ["--loader", "ts-node/esm"](ESM 场景) - 如果用了
nvm/fnm,调试器默认不识别版本切换;稳妥做法是在launch.json中显式指定路径,比如"runtimeExecutable": "~/.nvm/versions/node/v18.17.0/bin/node"
code-runner 插件跑 JS 卡住、乱码、不支持 import
它默认命令太简陋,不处理编码、模块类型和输入流,尤其在 Windows 中文路径或 ESM 项目下极易出问题。
- 乱码(Windows):在 VS Code 设置里搜
code-runner.executorMap,把javascript对应项改成:"node -r utf-8 $fileName" - ESM 报错
Cannot use import statement outside a module:确保package.json有"type": "module",再把 executor 改成:"node --experimental-specifier-resolution=node $fileName" - 遇到
process.stdin就假死:它不支持交互式输入,换用内置终端手动跑,或改用调试模式(F5)
真正麻烦的从来不是怎么配,而是你根本不知道 VS Code 的调试器和终端走的是两套环境查找逻辑——一个依赖 PATH,另一个可能绕过 shell 初始化,还受 nvm 或 volta 干扰。动手前,先确认 which node 输出的路径,在 launch.json 里显式写死,比猜它能不能自动找到靠谱得多。


















