答案是环境变量未生效,需检查并修复path配置:安装时未勾选“add to path”、路径含中文、终端未重载shell配置等均会导致此问题,应先在系统终端验证node -v,再同步至编辑器。

node -v 报错“不是内部或外部命令”怎么办
这是环境变量没生效的典型表现,不是 Node.js 没装好,而是系统找不到 node 命令。
- 安装时没勾选
Add to PATH(Windows 安装器里那个复选框),或者 macOS/Linux 下没把/usr/local/bin或~/.nvm/versions/node/vXX.XX.X/bin加进$PATH - 装在中文路径下(比如
D:\软件\nodejs)会导致某些 shell 读取失败 - 开了新终端但没重新加载 shell 配置(macOS/Linux 下改了
~/.zshrc或~/.bash_profile后要运行source ~/.zshrc)
验证方式:直接在系统终端(不是 VSCode 内置终端)里运行 node -v。如果这里都报错,VSCode 终端肯定也无效——先解决系统级问题,再谈编辑器配置。
launch.json 里 program 路径写错导致调试启动失败
program 字段必须指向一个可执行的 JS 文件,且路径是相对于工作区根目录(${workspaceFolder})的,不是相对于 .vscode 目录。
- 常见错误:
"program": "./app.js"→ 正确应为"program": "${workspaceFolder}/app.js"或更简洁的"program": "app.js" - 如果入口文件在
src/index.js,就写"program": "src/index.js",别漏掉src/ - 用
npm start启动的项目,不要在launch.json里硬写program,改用runtimeExecutable+runtimeArgs:
{
"type": "node",
"request": "launch",
"name": "npm start",
"runtimeExecutable": "npm",
"runtimeArgs": ["start"],
"console": "integratedTerminal"
}
否则会绕过 package.json 的 scripts,丢失环境变量或 babel/ts-node 等运行时支持。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
断点不触发?检查 skipFiles 和源码映射
尤其是用了 TypeScript、ESM、打包工具(如 Vite)或 Babel 的项目,断点常“悬空”——看着打上了,运行却不停。
- 默认
skipFiles会跳过<node_internals>/**</node_internals>,但不会自动处理node_modules或生成的.js文件;加一行"skipFiles": ["<node_internals>/**", "node_modules/**"]</node_internals>可避免误停在依赖里 - TS 项目必须确保
tsconfig.json中sourceMap: true,且编译后.js.map文件和.js在同一目录 - ESM 项目若用
node --loader ts-node/esm,需在launch.json中显式指定runtimeArgs,否则调试器无法识别源码映射
调试时看不到 require 或 module.exports 的值
Node.js 的 CommonJS 模块对象(require、exports、module)在调试控制台中默认不可枚举,直接输入会显示 undefined 或空对象。
- 这不是 bug,是 V8 引擎对内置模块对象的隐藏策略;想查
require.cache,得用Object.keys(require.cache)或Object.getOwnPropertyNames(require) - 调试中想看某个模块导出内容,别写
require('./utils'),改用const utils = require('./utils'); utils—— 先赋值再输出,变量名会被完整保留 - ESM 下
import是静态声明,import.meta可查路径,但import语句本身不能在调试控制台动态执行
真正卡住人的往往不是配置多复杂,而是某处路径少了个斜杠、某个 sourceMap 没开、或者以为调试器能像浏览器 DevTools 那样自由操作模块系统——它不能,得按 Node.js 的规则来。










