报错“Can’t find Node.js binary ‘node’”本质是VSCode调试器未继承shell环境PATH,需通过验证where node/which node、确保PATH包含node路径,或在launch.json中显式配置runtimeExecutable指向绝对路径。
VSCode 本身没有“Node.js 默认运行器”这个概念,你真正需要的是让 node 命令在终端和调试器中能被正确识别并调用——这取决于系统 PATH 和 launch.json 的配置方式,不是靠某个开关“设为默认”。
这是最常遇到的报错,本质是 VSCode 启动调试时找不到 node 可执行文件。它不读取你终端里能用的 node,而是依赖自己的环境变量或显式指定路径。
node -v 能成功,VSCode 的调试进程可能仍看不到它——因为 VSCode 启动时没继承你的 shell 环境(尤其 Windows 下通过快捷方式启动时)Ctrl+`),直接输 where node(Windows)或 which node(macOS/Linux),确认输出路径;再看 echo $PATH 是否包含该路径launch.json 中硬编码 runtimeExecutable,比如 "runtimeExecutable": "C:Program Filesnodejsnode.exe"(注意双反斜杠或正斜杠)program 和 runtimeExecutable 到底谁该指向哪里这两个字段作用不同,混用会导致调试失败或行为异常。
program 指向你要运行的 JS 入口文件,例如 "${workspaceFolder}/src/index.js" 或 "${file}"(当前编辑的文件)runtimeExecutable 指向 node 二进制本身,仅当系统 PATH 不可靠时才需显式设置;正常情况留空即可runtimeExecutable 和错误的 program(比如把 program 写成 node.exe 路径),VSCode 会尝试用 node 去执行另一个 node,报错 Error: spawn node ENOENT
"program": "${workspaceFolder}/node_modules/.bin/node" —— 这是 npm 的 wrapper 脚本,不是真正的 node,调试器无法 attachprogram
很多人把 program 改成 "${file}" 就以为万事大吉,但漏掉了关键约束条件。
.js 文件,且已保存(未保存的临时文件没有真实路径)${workspaceFolder},否则路径解析为空,导致 program 变成 "/index.js" 这类非法路径"program": "${file}" + "console": "integratedTerminal",避免调试控制台输出乱码或截断ts-node 或 esm,不要强行用 type: "node" 调试;改用 type: "pwa-node" 并配 runtimeArgs,例如 ["-r", "ts-node/register"]
真正容易被忽略的点是:VSCode 调试器启动时的环境变量与你终端里看到的未必一致,尤其在 Windows 上 PATH 经常被截断或覆盖。与其反复折腾全局 PATH,不如在 launch.json 的 env 字段里补全关键路径,或者直接用 runtimeExecutable 指向绝对路径——简单、确定、一次生效。