团队应将 launch.json 抽离为共享模板,用变量动态适配项目;设 runtimeexecutable 为本地 ts-node,runtimeargs 明确指定 --inspect 端口;vite/react 需正确配置 sourcemappathoverrides 和 url;git 中仅保留最小骨架或忽略 launch.json 并提供 example 参考。

怎么让 launch.json 不用每次新建项目都重写
团队里多人共用一套调试配置,核心是把 launch.json 从项目根目录抽出来复用,但 VSCode 默认只认工作区下的 .vscode/launch.json。直接复制粘贴容易漏改 program、cwd 或 env 路径,一跑就报 Cannot find module 或 command not found。
实操建议:
- 在团队共享的脚手架或内部 CLI 工具中,预置标准化的
launch.json模板,通过变量占位(如${workspaceFolderBasename}、${fileBasenameNoExtension})动态适配不同项目 - 禁用用户级全局
launch.json(VSCode 不支持),改用settings.json配合debug.javascript.autoAttachFilter等通用策略降低配置依赖 - 用
preLaunchTask统一触发构建,避免手动编译后忘了点“重启调试”导致断点不命中
Node.js 调试时 runtimeExecutable 和 runtimeArgs 怎么设才不踩坑
很多团队用 npx ts-node 或 node --inspect 启动,但硬编码路径或参数会导致:Mac 上能跑,CI 里失败;或者加了 --enable-source-maps 却没配 sourceMaps: true,断点全飘在 dist 文件里。
实操建议:
-
runtimeExecutable推荐设为"${workspaceFolder}/node_modules/.bin/ts-node",而不是全局ts-node—— 避免成员 Node 版本或全局安装不一致 -
runtimeArgs中带--inspect时,务必加port(如--inspect=9229),否则多项目并行调试会端口冲突 - 若用
nodemon+ 调试,别在runtimeArgs里塞--exec,改用console: "integratedTerminal"+preLaunchTask启动带 inspect 的监听进程
前端项目(React/Vite)调试时为什么断点不生效
常见现象:代码里打了断点,F5 启动后直接跳过,控制台显示 Breakpoint ignored because generated code not found。本质是 sourcemap 路径没对上,或是调试器连到了生产构建产物而非 dev server。
实操建议:
- 确认
sourceMapPathOverrides正确映射:Vite 项目通常要配"webpack:///src/*": "${webRoot}/src/*",React Create App 则常用"src/*": "${webRoot}/src/*" -
url字段必须指向 dev server 实际地址(如"http://localhost:5173"),不能写"https://example.com"或留空 - 禁用浏览器插件(尤其 React DevTools 旧版),它们有时会劫持
eval源码,让 VSCode 拿不到原始位置
多人协作时如何防止 launch.json 被误提交或覆盖
.vscode/launch.json 放 Git 里容易引发冲突:A 改了端口,B 改了环境变量,合并后调试直接崩。但完全忽略又导致新人无法开箱即用。
实操建议:
- Git 里只保留最小骨架(如仅
version和一个空configurations数组),具体配置靠README.md描述 + 脚本生成(例如npx @org/debug-init) - 在
.gitignore加.vscode/launch.json,但同步维护一个.vscode/launch.example.json供参考 —— 注意这个文件名不会被 VSCode 自动读取,纯文档用途 - 用 VSCode 的
settings.json配置debug.allowBreakpointsEverywhere和debug.javascript.usePreview,减少对 launch.json 的强依赖
真正麻烦的是跨语言混合调试(比如 Node + Python 子进程 + Chrome),这时候 compounds 配置稍有错位,整个链路就静默失败——得靠 trace: true 开日志,而不是猜哪一行少了个逗号。











