vscode 不提供环境变量加密能力,真正起作用的是 dotenv 库、文件权限控制和运行时注入;envfile 仅明文读取指定 .env 文件并注入进程,不加密、不校验、不防误提交。

VSCode 本身不支持环境变量“加密存储”,所谓加密实为混淆或隔离,真正起作用的是 dotenv + 文件权限 + 运行时注入,而不是 VSCode 提供的加密能力。
为什么 envFile 不等于加密
envFile 只是让调试器读取指定路径的 .env 文件内容,并以明文方式注入到进程环境变量中。文件本身未加密、未校验、不校验是否被 .gitignore 掩盖——它只是按路径硬读。
- 如果
.env.local被误提交到 Git,API_KEY 就直接暴露在仓库历史里 -
launch.json中写错路径(比如"envFile": "./.env"但实际是.env.development),变量根本不会加载 - 多个
envFile不叠加,只生效一个;想组合多个需靠dotenv库手动调用config()
真正防泄漏的三步实操
目标不是“让 VSCode 加密”,而是“不让敏感值落地+不被误传+运行时才可见”:
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
- 在项目根目录建
.env.local(.local后缀能被主流.gitignore模板自动捕获),只放SECRET_TOKEN=xxx这类值 -
launch.json显式写绝对路径:"envFile": "${workspaceFolder}/.env.local",避免相对路径因工作区切换失效 - Node.js 项目必须在代码里显式加载:
require('dotenv').config({ path: '.env.local' }),而非只依赖 VSCode 注入——否则npm start和 F5 调试行为不一致
code-runner 插件完全绕过 envFile
code-runner 执行 node $fileName 时,既不读 envFile,也不加载 .env,所有 process.env 来自系统 shell 环境,你的 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。










