vscode无配置方案切换功能,本质是通过launch.json中多个name唯一的configurations手动点选实现;各配置用envfile引用.env.*文件管理环境变量,compound仅组合启动而非切换环境。

VSCode 本身没有“配置方案切换”这个功能,所谓快速切换,本质是靠 launch.json 中多个预设配置 + 手动点选实现的。别被“方案”“管理”这类词带偏——它不保存状态、不记忆上次用哪个、也不支持运行时热切换。
怎么在 launch.json 里定义多个可选调试配置
每个环境对应一个独立的 configurations 对象,靠 name 字段区分,VSCode 调试面板顶部下拉菜单就靠它渲染选项。
-
name必须唯一且有辨识度,比如"Debug: Dev (Port 3001)"、"Debug: Staging (TLS)",避免只写"Dev"这种模糊名 -
type和request要匹配实际运行时:Node.js 项目用"type": "node",Python 用"type": "python",前端用"type": "pwa-chrome";request多数场景是"launch",远程 attach 则必须是"attach" -
program或module路径要写对:Python 调试不能写"program": "flask",得写"module": "flask"或指向具体脚本"program": "${workspaceFolder}/app.py" - 不同环境之间差异尽量只体现在
env、envFile、args上,其他字段复用,减少维护成本
envFile 比硬编码 env 更安全也更易协作
把环境变量拆到单独文件(如 .env.development、.env.production),再通过 envFile 字段引用,比在 launch.json 里直接写 "env": { "API_URL": "..." } 强得多。
-
.env.*文件必须加进.gitignore,尤其含密钥或内网地址时;团队共用的默认值放.env.example里 -
envFile路径支持变量,但别用太复杂的嵌套,"${workspaceFolder}/.env.${input:envName}"看似灵活,实际容易因输入错误导致加载失败且无提示 - 代码里要用
dotenv主动加载(Node.js)或os.environ(Python),VSCode 只负责把变量注入进程,不自动触发加载逻辑 - 注意文件编码:Windows 下用 UTF-8 无 BOM,否则某些语言运行时读不到变量
compound 配置不是“切换”,而是“同时启动多个”
如果你以为 compound 是用来切换前后端环境的,那就错了。它只是把几个已定义好的 configurations 组合起来,一键触发全部——比如点一下 "Full Stack Debug" 就同时跑后端服务和 Chrome 实例。
- compound 本身不带任何环境变量或参数,所有细节都在它引用的子配置里定义
- 如果前后端启动有依赖顺序(比如前端要等后端 ready),
compound不保证顺序,得靠preLaunchTask或外部工具(如concurrently)控制 - 不要在一个 compound 里混用不同
type的配置还指望共享断点——Node.js 断点不会在 Chrome 里生效,反之亦然 - 命名 compound 时避免用
"Dev"这类泛称,明确写成"Frontend + Backend (Dev)",防止和单个配置重名导致下拉菜单混乱
真正容易被忽略的是:VSCode 不会校验 envFile 文件是否存在,也不会提醒你某个 name 在 compounds 里拼错了。运行失败时,错误日志往往只显示“无法连接”或“模块未找到”,根本不会指出是配置引用失效。所以每次新增环境,务必手动点开对应配置,确认它能独立跑通,再考虑组合。











