在 launch.json 中定义多个调试配置需将 configurations 设为包含多个对象的数组,每个对象必须有唯一 name 字段,如 "debug (dev)" 和 "debug (staging)",其余字段(runtimeargs、env、port 等)按环境差异化设置。

launch.json 里怎么定义多个调试配置
VSCode 的调试配置靠 launch.json 文件驱动,它本质是一个 JSON 数组,每个元素就是一个独立的调试配置(configuration)。只要把不同环境(如 dev / staging / prod)的参数拆成多个对象,就能共存。
关键点是每个配置必须有唯一 name,这是下拉框里显示的名称,也是切换时识别的依据:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug (dev)",
"type": "pwa-node",
"request": "launch",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "dev"],
"port": 9229
},
{
"name": "Debug (staging)",
"type": "pwa-node",
"request": "launch",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "staging"],
"port": 9230
}
]
}
常见错误:漏写 name、重复 name、或把多个配置写成单个对象里的字段(比如误加 "dev": { ... }),这会导致下拉框不出现选项或加载失败。
调试启动时如何快速从下拉框选配置
保存好 launch.json 后,VSCode 左侧活动栏点击「运行和调试」图标(或 Ctrl+Shift+D),顶部就会出现带下拉箭头的配置名称 —— 这就是当前激活的配置。点击即可展开全部 name 列表,选中即生效。
注意几个实际细节:
- 下拉框只显示
configurations数组里合法的name,不会显示注释、空对象或语法错误项 - 切换后不需要重启 VSCode,也不用重新打开文件夹,改完
launch.json保存即刷新下拉列表 - 快捷键
Ctrl+Shift+P→ 输入 “Debug: Select and Start Debugging” 也能呼出同一菜单
不同环境配置容易混淆的参数差异
光靠 name 区分不够,真正影响调试行为的是具体字段。以下几项在多环境配置中最常变动,也最容易配错:
-
runtimeArgs:决定启动哪个 npm script(devvsstart:staging),别写成硬编码端口或环境变量 -
env:显式注入环境变量比依赖 shell 更可靠,例如"NODE_ENV": "staging" -
port或address:多个 Node.js 调试进程不能监听同一端口,本地并行调试时必须错开 -
preLaunchTask:如果 dev 环境需先构建、prod 需先打包,这里要对应不同的 task label
别指望靠注释区分逻辑,VSCode 不解析注释。所有差异化行为必须落在可执行字段上。
为什么改了 launch.json 却没出现在下拉框
最常见原因是文件路径或格式问题:
-
.vscode/launch.json必须位于工作区根目录(即你打开的文件夹),不是用户级或全局路径 - JSON 语法错误(比如末尾多逗号、单引号代替双引号、中文标点)会导致整个文件被忽略,VSCode 不报错但下拉框为空
- 配置中
type值无效(比如写成"node"但没装官方 Node.js 扩展,或写成"python"但没装 Python 扩展),该配置会被静默跳过 - 工作区启用了多根文件夹(workspace folder),而
launch.json放在子文件夹里 —— 它只对所在文件夹生效
验证方法:打开命令面板(Ctrl+Shift+P),输入 “Developer: Toggle Developer Tools”,看 Console 是否有 launch config error 类提示。
多环境调试本身不复杂,难的是让每个配置真正隔离且可预期。名字别起太随意,参数别靠脑子记,改完立刻试跑一次 —— 尤其是端口冲突和 env 注入,这两个点在线上复现时最难排查。











