VSCode调试Node.js断点不生效,主因是node未进环境变量或program路径错误;需在终端验证node -v,并使program指向真实可执行JS文件(如"${workspaceFolder}/dist/index.js")。

VSCode 本身不编译 JavaScript,Node.js 也不“编译”——它直接解释执行。所谓“快速编译与运行”,本质是让 VSCode 正确调用系统已安装的 node 命令,并绕过常见路径、编码、模块系统等阻塞点。
终端里 node -v 成功,但 VSCode 里报 command not found: node
这不是插件或设置问题,而是 VSCode 启动时没加载 shell 的环境变量初始化文件(比如 ~/.zshrc 或 ~/.bash_profile)。macOS/Linux 下从 Dock 或 Spotlight 启动 VSCode,PATH 往往不包含 Homebrew 安装的 node(如 /opt/homebrew/bin/node);Windows 则常因安装时漏勾 “Add to PATH” 导致系统级 PATH 缺失。
- macOS/Linux:确认
~/.zshrc(或当前 shell 对应的配置文件)中含export PATH="/opt/homebrew/bin:$PATH"(Homebrew)或export PATH="/usr/local/bin:$PATH"(手动安装),改完后必须关闭所有 VSCode 窗口,再在终端执行code .启动 - Windows:打开“系统属性 → 高级 → 环境变量”,把
C:\Program Files\nodejs\加入“系统变量”的PATH,重启 VSCode - 验证唯一方式:在 VSCode 内置终端(
Ctrl + `)里敲node -v;没输出就别往下配launch.json或code-runner
用 code-runner 运行 JS 却乱码、卡死、报 Cannot use import statement
code-runner 默认命令是 node $fileName,它不处理编码、ESM 模块、输入流,也不读 package.json,所以中文路径下乱码、import 报错、process.stdin 假死全是常态。
基于三引擎设计,从微信文章、新闻和博客网页提取干净内容,支持标题作者日期元数据,多格式和批量处理。
- Windows 中文路径乱码:在 VSCode 设置里搜
code-runner.executorMap,把javascript对应值改成:"node -r utf-8 $fileName" - ESM 报错(
Cannot use import statement):确保项目根目录有package.json且含"type": "module",再把 executor 改成:"node --experimental-specifier-resolution=node $fileName" - 遇到
process.stdin就卡住:这是code-runner固有限制,它不支持交互式输入;换用内置终端手动运行,或改用调试模式(F5)
launch.json 调试时断点不生效,提示 Cannot launch program
这个错误和代码语法无关,是调试器找不到可执行的 JS 文件,或源映射(source map)与入口路径不匹配。尤其常见于 TypeScript 编译后、打包产物、或用了 import 的 ESM 项目。
-
program字段必须指向一个能被node直接执行的 JS 文件,比如${workspaceFolder}/dist/index.js;不能是.ts、.mjs或未编译的源码 - TypeScript 项目:在
tsconfig.json中必须启用"sourceMaps": true,且编译后的.js.map和.js必须在同一目录 - ESM 项目:调试器默认不支持
type: "module",需在launch.json的配置中加"runtimeArgs": ["--experimental-specifier-resolution=node"]
真正容易被忽略的点是:VSCode 的 Node.js 调试器(pwa-node)对模块类型和 source map 路径极其敏感,哪怕 .js.map 文件名多一个空格、或 program 指向了 symlink 而非真实路径,都会静默失败。别只盯着代码逻辑,先确认终端里 node ./dist/index.js 能跑通,再调调试器。

















