VSCode调试器报“command not found: node”是因为其启动的是干净进程,不继承终端PATH,必须在launch.json的configurations内用env字段显式配置PATH,平台键(如windows/linux/osx)和分隔符(;或:)须严格匹配,且改完需彻底退出VSCode重启。

VSCode终端能跑node -v,但调试器报“command not found: node”
这不是插件或launch.json写错了,是调试器启动时压根没继承你的PATH——它和终端用的是两套环境变量加载逻辑。
终端能用node,只说明terminal.integrated读了shell配置(比如~/.zshrc);但debugger和tasks启动的是干净进程,PATH为空,除非你显式喂进去。
- 验证方式唯一:在VSCode内置终端(
Ctrl + `)里执行node -v——没输出就别配launch.json,全是空转 - macOS/Linux:改
settings.json,加"terminal.integrated.env.osx": { "PATH": "/opt/homebrew/bin:${env:PATH}" }(路径用which node确认) - Windows:去系统环境变量面板,把
C:Program Files odejs加进“用户变量”的PATH(别只加系统变量),然后彻底退出VSCode再重开 - 别信
envFile能补PATH——它只读.env里的键值对,对PATH无效
launch.json里env字段写了PATH却还是找不到node
env字段位置错、平台键写错、分隔符混用,都会让PATH注入失效。
- 必须写在
configurations数组的单个配置项内部,不能放在外层 - 平台键要严格匹配:
terminal.integrated.env.windows、.linux、.osx(不是mac或darwin) - Windows用
;拼接路径:"PATH": "${env:PATH};C:\Program Files\nodejs";Linux/macOS用: - 别漏掉
${env:PATH}——否则连git、ls都调不了
Node版本≥14但调试时仍挂起失败
VSCode调试器依赖async_hooks等底层API,低于Node 14会静默降级或断点不生效,但错误提示可能藏在输出面板里。
- 打开
Ctrl + Shift + U,选Debug输出通道,搜async_hooks或version关键字 - 在
launch.json里加"runtimeVersion": "18.18.2"(填你实际版本)可强制校验,避免fallback - 某些CI或remote-ssh场景下,即使本地是18.x,远程host可能仍是12.x——得单独配
runtimeExecutable指向绝对路径
用了ts-node或ESM,但断点停在.js文件里
源码映射链路断了,VSCode不知道.ts和.js怎么对应,自然没法跳转回原文件打点。
- TypeScript项目:确保
tsconfig.json有"sourceMap": true,且编译后.js.map和.js在同一目录 -
launch.json里必须同时设"sourceMaps": true和"outFiles": ["./dist/**/*.js"] - ESM项目:
package.json里缺"type": "module",调试器就按CommonJS解析,import报错、路径也错乱 - ts-node项目:别用
type: "node",改用type: "pwa-node",并配"runtimeExecutable": "npx"和"runtimeArgs": ["ts-node", "${file}"]


















