VSCode不提供环境变量加密功能,所谓“加密”实为混淆或隔离,核心依赖dotenv+文件权限+启动注入;envFile仅读取明文.env文件并注入进程,无加密能力,且VSCode不校验git忽略规则或路径正确性。

VSCode 本身不提供环境变量加密功能,所谓“环境变量加密”实际是混淆或隔离敏感值,核心靠 dotenv + 文件权限控制 + 启动时注入实现,不是真正加密。
为什么 launch.json 的 envFile 不等于加密
envFile 只是让调试器读取 .env 文件内容并注入到进程环境,文件本身仍是明文。如果项目被上传、共享或部署,.env 里的 API_KEY 或 DB_PASSWORD 就直接暴露了。
- VSCode 不会自动加密/解密文件,也不校验
.env是否被 git 忽略 -
envFile路径写错(比如写成"./.env.local"但文件实际叫.env.development)会导致变量根本没加载 - 多个
envFile不叠加,只读一个;想组合用dotenv库手动加载
真正防泄漏的三步实操
把敏感变量从代码里摘出来,再限制谁能读到它:
- 在项目根目录建
.env.local(加.local后缀确保被.gitignore默认捕获),只存SECRET_TOKEN=xxx这类值 - 在
launch.json中明确指定:"envFile": "${workspaceFolder}/.env.local";别用相对路径如"./.env",容易因工作区切换失效 - 运行时用
dotenv加载(Node.js 项目需require('dotenv').config({ path: '.env.local' })),而不是依赖 VSCode 单独注入——这样 CLI 启动和调试行为才一致
避免用 code-runner 插件处理敏感变量
code-runner 执行 node $fileName 时完全不读 envFile,也不会加载 .env,所有环境变量都来自系统默认 PATH 和 shell 环境,process.env 里根本看不到你配的 SECRET_TOKEN。
- 它不支持
--env-file参数,也没法传NODE_OPTIONS=--require=dotenv/config - 如果非要用,得硬编码进 executorMap:
"node -r dotenv/config $fileName dotenv_config_path=.env.local" - 但更推荐:关掉 code-runner 跑敏感逻辑,改用
F5调试或终端执行npm start
真正的难点不在配置,而在于团队协作时有人误删 .gitignore 里的 .env* 规则,或者把 .env.local 提交到仓库——VSCode 不会拦,dotenv 也不会报错,直到线上服务爆 401。


















