先说说核心结论:VSCode 本身只是个编辑器,它不带 Node.js 运行时。你装再多插件,系统里没有 Node,它一样跑不起来。所以第一步,也是所有人最容易栽跟头的地方——必须在系统层面把 Node.js 装好,并且确保终端能认出 node 和 npm 这两个命令。否则后续所有调试、运行、断点都只是纸上谈兵。
必须先在系统安装Node.js并确保终端能调用node和npm,再彻底重启VSCode;调试需正确配置launch.json的program字段,禁用Code Runner插件,多版本时显式指定runtimeExecutable。

验证 node 和 npm 是否真可用——不是“看起来有”,是终端里能调用
很多人卡在这一步却去翻 VSCode 的设置,其实问题根本不在编辑器。打开系统终端(不是 VSCode 内置终端),执行以下命令:
node -v和npm -v都得输出版本号,才算真正装好- Windows 用户如果报
'node' 不是内部或外部命令,大概率是安装时没勾选 Add to PATH;重装时务必勾选,别跳过 - macOS/Linux 用
nvm的,确认source ~/.nvm/nvm.sh已写进 shell 配置,并新开终端验证which node - 装完后必须完全退出 VSCode(macOS 在 Dock 右键选「退出」,Windows 在任务管理器里杀掉所有
Code.exe),再重新打开——否则内置终端读不到新 PATH
VSCode 调试前必须生成 launch.json 并检查 program 字段
VSCode 自带 Node.js 调试支持,不需要额外插件。但默认配置容易出错,尤其 program 字段:
- 按
Ctrl+Shift+P(macOS 是Cmd+Shift+P),输入Debug: Open Configuration,选Node.js → Current File - 生成的
launch.json默认是"program": "${workspaceFolder}/index.js",如果你的入口文件叫app.js或server.js,必须手动改成对应路径 - 更稳妥的做法是设为
"program": "${file}",这样 F5 总是运行当前打开的文件,不用反复改配置 - 别动
"type": "node"和"request": "launch",这两个是调试器识别的关键,改错会导致整个调试流程静默失败
别用 Code Runner 插件跑 Node.js 脚本
Code Runner 默认用 node 执行 JS 文件,但它绕过项目上下文,不读 package.json 里的 "type": "module" 或 exports 配置,极易报错:
- 比如项目声明了 ES Module,但
Code Runner仍按 CommonJS 解析,直接抛Cannot use import statement outside a module - 正式开发中建议禁用它,改用 VSCode 内置终端(
Ctrl+`)执行node app.js,行为与部署环境一致 - 如果非要快速验证单文件逻辑,只对无
import/export、无依赖的脚本用Code Runner
多 Node 版本共存时,runtimeExecutable 必须显式指定
用 nvm 或 nvm-windows 管理多个版本时,VSCode 调试器可能调用错版本,导致断点不触发、require 行为异常、源码映射失败:
- 在
.vscode/launch.json中加字段:"runtimeExecutable": "/usr/local/bin/node"(macOS/Linux)或"runtimeExecutable": "C:\Program Files\nodejs\node.exe"(Windows) - 加完后,在代码里写
console.log(process.execPath),对比调试器输出的路径是否和runtimeExecutable一致 - 不写这个字段时,VSCode 按 PATH 顺序找
node,而 PATH 里的node很可能和你在终端里which node看到的不是同一个
最后再唠叨一句:最常被忽略的其实是环境变量加载时机。改完 PATH 或 npm 配置后,VSCode 不会自动继承,必须彻底重启;还有就是 launch.json 里那个看似不起眼的 program 字段,写错一个字符就让 F5 彻底失效。记住这几点,基本就能避开 90% 的坑。