VS Code通过独立但协同的node --inspect和DevTools协议分别调试后端与前端,需分设type: "node"和type: "chrome"配置并确保环境变量、服务启动、webRoot及source map严格匹配,不可混用或强塞于单个配置。

VSCode 本身不运行 Node.js,也不直接对接 Chrome 调试器——它靠的是两个独立但可协同的机制:Node.js 调试走 node --inspect 协议,Chrome 调试走 DevTools 协议;两者能“对接”,前提是你的 JS 代码在浏览器里执行(比如前端项目),且 VSCode 启动了正确的调试配置。别指望一个 launch.json 同时跑通后端和前端调试。
node -v 能跑,但 VSCode 里 debug 报 command not found
这不是插件或配置问题,是环境变量没继承进来。
- macOS/Linux:从 Dock 或 Spotlight 启动 VSCode 时,它不读
~/.zshrc或~/.bash_profile;改完配置文件后必须彻底退出 VSCode(不只是关闭窗口),再重新启动,或者直接在终端执行code . - Windows:安装 Node.js 时若没勾选 “Add to PATH”,系统级 PATH 就没有
C:\Program Files\nodejs\;需手动进“系统属性 → 高级 → 环境变量”,把该路径加到“系统变量”的PATH里,再重启 VSCode - 验证方式只有一种:打开 VSCode 内置终端(
Ctrl + `),输入node -v和which node;没输出就别往下配launch.json
launch.json 中 type: "node" 和 type: "chrome" 的根本区别
它们对应完全不同的调试场景,混用必失败。
-
"type": "node":调试本地 Node.js 脚本(如index.js)或 Express/Koa 后端服务;依赖node命令,断点打在服务端 JS 里 -
"type": "chrome":调试运行在 Chrome 里的前端 JS(HTML 中的<script></script>或打包后的 bundle);VSCode 不起服务,只连接已启动的 Chrome 实例;必须配合本地 HTTP 服务(如live-server或http-server),禁用file://协议 - 常见错误:用
chrome类型去调试app.js(无 HTML 容器),或用node类型去调试main.js(期望看到 DOM 元素)——都会提示 “Cannot launch program” 或白屏
Chrome 调试必须起本地服务,且 webRoot 要对得上
VSCode 的 Chrome 调试器不会自动起服务器,它只负责连接 Chrome 并映射源码;如果 url 指向 http://localhost:3000,但你没起服务,就会卡在加载页。
生成Blender Python (bpy)脚本,该脚本使用node_groups API和GeometryNodeTree接口程序化地创建几何节点修改器树,用于参数化3D资产生成。
- 推荐用
Live Server扩展:右键 HTML 文件 → “Open with Live Server”,它会自动开http://127.0.0.1:5500/xxx.html -
launch.json中的webRoot必须指向你项目中实际提供 HTML 的根目录;比如 HTML 在src/index.html,但服务根目录是src/,那就设为"${workspaceFolder}/src";设错会导致断点灰色、提示 “source map not found” - 如果用了构建工具(Vite/Webpack),确保
devtool: 'source-map'开启,且生成的.map文件和 JS 在同一目录;否则 VSCode 找不到原始源码位置
想让 Node.js 后端和前端页面一起调试?别硬凑一个配置
一个 launch.json 只能启动一种调试会话。真要联动,得靠组合策略。
- 后端用
"type": "node"配置,监听localhost:3000;前端另起一个"type": "chrome"配置,url设为"http://localhost:3000"—— 两个调试会话并行启动 - 如果后端是 Express 且带静态资源,确保
app.use(express.static('public'))指向正确目录,否则 Chrome 打不开页面 - 注意端口冲突:默认 Chrome 调试监听
9222,Node.js--inspect默认9229;如果两个都用 attach 模式,得手动指定不同端口,比如--inspect=9230
真正容易被忽略的,是调试目标和运行环境的严格匹配:Chrome 调试器只认浏览器上下文,Node 调试器只认 V8 进程;没搞清代码在哪执行,配再漂亮的 launch.json 也只会报错或静默失效。










