VSCode报“command not found”是因未继承shell的PATH:macOS/Linux需确保~/.zshrc生效并从终端执行code .启动,Windows需手动将Node路径加入系统环境变量PATH,验证必须在VSCode内置终端运行node -v有输出才算成功。

node -v 在系统终端能跑,但 VSCode 里报 command not found
这不是 VSCode 设置问题,是它没继承你 shell 的 PATH。macOS/Linux 用户常见于 ~/.zshrc 或 ~/.bash_profile 里写了 export PATH,但 VSCode 启动时根本没加载这些文件;Windows 用户则基本是安装 Node.js 时漏勾了 Add to PATH。
实操建议:
- macOS/Linux:改完
~/.zshrc后,彻底退出 VSCode(关所有窗口),再从终端执行code .启动 - Windows:右键“此电脑”→属性→高级系统设置→环境变量,在“系统变量”里的
Path中手动添加C:Program Files odejs(或你实际的安装路径) - 验证方式:打开 VSCode 内置终端(
Ctrl + `),直接输node -v—— 没输出就别往下配,全是白搭
launch.json 里 runtimeExecutable 不写会出什么问题
不写 runtimeExecutable,VSCode 就按系统 PATH 顺序找 node,而你终端里看到的 node 和调试器调用的很可能不是同一个——尤其用了 nvm、fnm 或同时装了多个 Node 版本时。
现象包括:断点不触发、require() 行为异常、源码映射失效、甚至 process.execPath 打印出的路径和你预期不符。
实操建议:
- 在项目根目录下创建
.vscode/launch.json,显式写死路径:"runtimeExecutable": "/usr/local/bin/node"(macOS/Linux)或"runtimeExecutable": "C:\nodejs\node.exe"(Windows) - 配合
console.log(process.execPath)验证调试器实际调用的是哪个node - 如果用了
nvm,路径得写成类似"~/.nvm/versions/node/v18.17.0/bin/node",不能只写node
program 字段填错导致断点永远不生效
program 是调试器唯一认的入口,填错路径、混用 .ts 和 .js、忽略工作目录,断点就停不住。
根据 package.json 中的 engines 字段自动检测 Node.js 版本需求,未安装 nvm 时自动安装并切换至对应版本。支持 Windows、macOS、Linux。适用于 Node.js 项目开发、版本切换和环境配置。
常见错误:
- TS 项目写
"program": "${workspaceFolder}/src/server.ts"→ 必须指向编译后的.js文件,比如"${workspaceFolder}/dist/server.js" - ESM 项目没在
package.json里加"type": "module"→ 调试器仍按 CommonJS 解析,import全报错 - 后端项目用
"program": "${file}"→ 只适合单文件测试,多文件项目必须写绝对路径,并加"cwd": "${workspaceFolder}"显式声明工作目录
别让 code-runner 插件毁掉你的模块解析
code-runner 默认用 node 直接执行 JS 文件,但它绕过 package.json 的 type 字段和 exports 配置,ESM 场景下十有八九报 Cannot use import statement outside a module。
更糟的是,它不加载项目上下文,也不传 --loader 或 --experimental-specifier-resolution 参数,连 require('./config') 都可能因路径解析失败而崩。
实操建议:
- 正式开发中禁用
code-runner,用 VSCode 内置终端(Ctrl + `)手动执行node index.js - 若非要保留,进设置搜
code-runner.executorMap,把javascript对应值改成:"node --experimental-specifier-resolution=node $fileName" - 带
process.stdin的脚本别用它跑——它不支持输入,直接卡死
真正麻烦的从来不是配置项本身,而是不同层级环境(shell / VSCode / 调试器 / npm script)各自维护一套 PATH 和模块解析逻辑。一个 package.json 里少写一行 "type": "module",或者 launch.json 里漏掉 cwd,都可能让断点消失得毫无征兆。










