vscode本身不配置node环境,只调用系统已安装的node;工作区级配置本质是通过launch.json、package.json和终端path协同实现版本识别、路径解析与调试启动。

VSCode 本身不“配置 Node 环境”,它只调用你系统里已装好的 node;所谓“工作区级配置”,本质是让当前项目能稳定识别 node 版本、正确解析模块路径、精准启动调试入口——关键在 launch.json、package.json 和终端 PATH 的协同。
为什么终端能跑 node,但工作区调试报 “Cannot find runtime 'node'”
这不是工作区没配好,而是 VSCode 调试器没继承到你 shell 的 PATH。macOS/Linux 用户常见于 ~/.zshrc 里写了 export PATH,但 VSCode 没加载它;Windows 用户多因安装时没勾选 “Add to PATH”,或用了 nvm-windows 却没执行 nvm use。
- 验证方式:在 VSCode 内置终端(
Ctrl + `)里直接运行which node(macOS/Linux)或where node(Windows),有输出才算真正就位 - macOS/Linux:改完 shell 配置后,必须彻底退出 VSCode,再从终端执行
code .启动 - Windows:手动把
C:\Program Files\nodejs\加进“系统环境变量 > PATH”,然后关闭并重开 VSCode(不是仅重启终端)
launch.json 中 program 字段怎么写才不踩坑
program 是调试器找入口的唯一依据,写错就等于断点永远设不上。它不是“选个 JS 文件就行”,而要匹配实际执行路径和模块解析模式。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 纯 JS 项目:若主文件是
app.js,就得写"program": "${workspaceFolder}/app.js",不能依赖默认的index.js - TypeScript 项目:必须指向编译后的
.js文件,比如"program": "${workspaceFolder}/dist/server.js";同时确保tsconfig.json含"sourceMap": true,且.js.map和.js在同一目录 - ESM 项目:
package.json必须有"type": "module",否则调试器按 CommonJS 解析,import路径全失效 - 加
"cwd": "${workspaceFolder}"显式声明工作目录,避免require('./config')因路径解析失败报Cannot find module
npm install 成功,但 require() 报错找不到模块
这通常不是 Node 环境问题,而是 VSCode 的语言服务没识别项目结构,尤其在 monorepo、软链接依赖(npm link)或 CJS/ESM 混用场景下。
- 先运行
npm ls <module-name></module-name>,确认模块真实存在且无extraneous标记 - 检查
package.json是否漏了"type": "module"—— 缺它会导致 ESM 文件被当 CJS 解析,路径解析规则完全不同 - 单仓库多包项目(如 pnpm workspace 或 lerna),需在根目录建
jsconfig.json或tsconfig.json,并配"compilerOptions": { "baseUrl": "." },否则跳转和补全会失灵 - 禁用所有“增强 JS 支持”的第三方插件,VSCode 内置的 JavaScript 和 TypeScript 语言服务已足够,插件冲突反而导致类型提示失效
用 nodemon 或 ts-node 调试时断点不生效
这类工具接管了进程启动逻辑,VSCode 默认的 launch 模式无法稳定附加——硬配 runtimeExecutable 指向 nodemon 只会让调试器反复断连或跳过断点。
-
nodemon:改用attach模式——终端先执行nodemon --inspect-brk src/server.js,再在launch.json新增一个"request": "attach"配置连port: 9229 -
ts-node:用"type": "pwa-node"(新版推荐),配"runtimeExecutable": "ts-node"并加"runtimeArgs": ["--loader", "ts-node/esm"](ESM 场景) - 不要在
launch.json里把"program"设为"npm"+"args": ["start"]—— 这种方式看不到 npm 输出,且无法稳定设断点;真要跑脚本,改用"console": "integratedTerminal"并设"request": "launch"为"program": "npm"
最易被忽略的点是:VSCode 调试器是否真的在用你预期的那个 node 版本。哪怕 node -v 输出正确,launch.json 里没显式指定 runtimeExecutable 时,它仍可能 fallback 到另一个版本(比如系统自带的老版本),尤其在 WSL 或容器开发中。动手前,先看 Debug Console 里 process.version 输出的是不是你要的那个版本。










