env 中同名键无条件覆盖 envFile 的值;PATH 等变量需按平台区分大小写和分隔符;Python 调试须显式配置 PYTHONPATH;多环境推荐用 envFile 动态加载 JSON 并转换;框架构建后需清缓存才能生效。

launch.json 中的 env 参数只对当前调试会话生效,不会污染系统或终端环境,但配置错顺序、路径或变量名就会直接导致程序启动失败或读取到错误值。
env 和 envFile 同时存在时,谁说了算?
当 env 和 envFile 同时配置,env 里的同名键会无条件覆盖 envFile 中的值。这不是“合并”,而是明确的覆盖行为。
- 比如
envFile里写了DB_PORT=5432,而env里又写了"DB_PORT": "5433",最终进程看到的就是5433 - 这个覆盖逻辑在 Node.js、Python、C++ 等所有支持
env的调试器中一致,不因语言而异 - 如果你依赖
dotenv.config({ override: true })在代码里反向覆盖环境变量,那launch.json注入的值会被刷掉——这是代码层逻辑,和调试器无关
引用系统变量时,${env:VAR_NAME} 要小心平台差异
${env:PATH} 这类写法在 Windows 和 Linux/macOS 下行为不同:Windows 是 Path(大小写敏感),Linux/macOS 是 PATH;且分隔符也不同(; vs :)。
用于端到端视频本地化流程的轻量编排器,路由至四个专注子技能——/wjs-transcribing-audio、/wjs-translating-subtitles...
- 安全写法是分别处理:
"PATH": "${env:PATH}:${workspaceFolder}/bin"(Linux/macOS),"Path": "${env:Path};${workspaceFolder}\bin"(Windows) - VSCode 不自动做跨平台转换,也不会报错,只会静默失败——比如 PATH 拼错后模块找不到,但错误信息里完全看不出是环境变量问题
- 若需统一处理,建议用
envFile抽离,并在脚本中根据process.platform或os.platform()动态生成
Python 调试时 PYTHONPATH 错误是最常见的启动失败原因
VSCode 的 Python 调试器不会自动继承终端里的 PYTHONPATH,也不读取 .bashrc 或 pyvenv.cfg 中的路径设置,必须显式通过 env 注入。
- 典型配置:
"env": { "PYTHONPATH": "${workspaceFolder}/src:${workspaceFolder}/lib" } - 注意路径分隔符:Windows 用
;,其他系统用:;硬写成:在 Windows 下会导致路径被截断 - 如果项目用了 PEP 420 隐式命名空间包,漏掉父目录路径会导致
ImportError: attempted relative import with no known parent package - 验证方式:在入口文件第一行加
import sys; print(sys.path),确认输出里包含你期望的路径
多环境切换别硬编码,用变量引用 JSON 文件更可靠
把开发、测试、预发的环境变量全堆在 env 对象里,不仅难维护,还容易手抖改错。推荐用 envFile + 外部 JSON 文件,再配合 VSCode 变量动态引用。
- 例如创建
.env.dev.json、.env.staging.json,内容为标准 JSON 对象:{"API_BASE_URL": "https://dev.api.example.com", "LOG_LEVEL": "debug"} - 在
launch.json中写:"envFile": "${workspaceFolder}/.env.${input:env}.json" - 再配一个
inputs段落,用pickString让用户选择环境,避免手动改文件名出错 - 注意:
envFile只支持.env格式(KEY=VALUE),不支持 JSON;所以得用插件(如 Command Variable)或自定义 task 做 JSON → .env 转换,否则会加载失败
最常被忽略的一点:Next.js、Vite、Remix 等框架在构建阶段就固化了环境变量,launch.json 里改 env 对已生成的 .next 或 dist 目录完全无效——必须清缓存重构建,否则永远读不到新值。

















