VSCode调试Node.js问题根源在环境变量继承、launch.json路径配置、模块解析模式三处;需先确保终端node -v有效,再检查shell初始化文件或系统PATH,正确配置program字段、ESM/type设置及避免code-runner插件缺陷。

VSCode 本身不运行 Node.js,它只负责启动、连接和调试——所有“找不到 node”“断点不生效”“乱码卡住”的问题,根源几乎都在环境变量继承、launch.json 路径配置、模块解析模式这三处。别折腾插件或重装 VSCode,先确认终端里 node -v 能输出版本号,再往下走。
为什么终端能用 node,但 VSCode 里报 command not found
根本不是 VSCode 配置错了,是它没加载你 shell 的初始化文件(比如 ~/.zshrc 或 ~/.bash_profile),导致 PATH 里没有 node 路径。
- macOS/Linux:在终端运行
which node,确认路径(如/opt/homebrew/bin/node)已写进~/.zshrc的export PATH="...:$PATH";改完后必须彻底退出 VSCode(不是关窗口),再从终端执行code .启动 - Windows:打开系统环境变量,检查
C:\Program Files\nodejs\是否在“系统变量 > PATH”中;没加就手动添,或者直接重装 Node.js 并务必勾选 “Add to PATH” - 验证方式:打开 VSCode 内置终端(
Ctrl + `),直接输node -v—— 没输出就别配launch.json,全是白搭
launch.json 中 program 字段总指向错误文件
program 是调试器找入口的唯一依据,写错路径、混用源文件和编译后文件、忽略工作目录,断点就永远停不住。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 单文件测试可用
"program": "${file}";后端项目必须显式写绝对路径,比如"program": "${workspaceFolder}/src/server.js" - TypeScript 项目:
program必须指向.js文件(如dist/server.js),不能指src/server.ts;同时tsconfig.json里得有"sourceMap": true,且.js.map和.js在同一目录 - ESM 项目:
package.json必须含"type": "module",否则调试器按 CommonJS 解析,import路径全错 - 加
"cwd": "${workspaceFolder}"显式声明工作目录,避免require('./config')因路径解析失败而报Cannot find module
用 nodemon 或 ts-node 调试时断点失效
这类工具会接管进程启动逻辑,VSCode 默认的 launch 模式无法稳定附加,强行配 runtimeExecutable 很容易断连或跳过断点。
- nodemon:不要在
launch.json里设runtimeExecutable指向nodemon;改用attach模式 —— 终端先跑nodemon --inspect-brk src/server.js,再在launch.json新增一个request: "attach"配置连过去 - ts-node:用
type: "pwa-node"(新版推荐),配runtimeExecutable: "npx"和runtimeArgs: ["ts-node", "--project", "./tsconfig.json"],再把args设为["./src/server.ts"] - esbuild-node 或其他 loader:统一走
node --loader esbuild-node/register模式,runtimeArgs里传完整参数,别省略--loader
code-runner 插件跑 JS 脚本乱码或假死
这个插件默认命令极简,不处理编码、模块类型、输入流,尤其在 Windows 中文路径或 ESM 项目下极易出问题。
- 乱码(Windows):在设置里搜
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就卡住:code-runner 不支持交互式输入,换用内置终端手动执行,或直接按F5进调试模式
最常被忽略的一点:VSCode 的 Node.js 调试器(vscode-js-debug)不读取你 shell 里的 nvm 或 fnm 切换逻辑。哪怕你在终端里 nvm use 20 成功了,调试器仍可能用系统默认版本。稳妥做法是在 launch.json 里显式写死 runtimeExecutable,比如 "~/.nvm/versions/node/v20.11.1/bin/node"。

















