环境变量Env Var

你可能会说

密钥不能直接写进代码里,那应该放哪?

环境变量是在代码外保存设置值、让不同运行地点读取各自配置的方式。例如本机测试、测试地址和正式网站可以分别使用不同服务地址或密钥。会发到浏览器的设置谁都能查看,真正的密钥只能留在服务器。.env 常用来在本机保存这些值,但它不是保险箱,也不应上传到代码仓库。
.env · 本地开发配置 OPENAI_API_KEY=sk-proj-•••••• DATABASE_URL=postgres://••••
process.env.OPENAI_API_KEY 🛡 .gitignore 规则已匹配;提交前再看 git status

什么时候用

  • 在本地 .env 中保存服务端配置,代码只读取变量名
    .env
    OPENAI_API_KEY=sk-••••••
    DATABASE_URL=postgres://••••
    本地配置一行一个;敏感值不要提交、截图或转发
  • 按照所用框架的方式在服务端读取环境变量
    const key = process.env.OPENAI_API_KEY代码读取变量名;替换配置值通常无需修改代码
  • 忽略文件 .gitignore排除本地配置,并在提交前再次检查
    .gitignore
    node_modules
    .env
    匹配规则的未跟踪文件会被跳过;已跟踪文件要另行处理
  • 本地与线上分别配置:在 部署上线 Deployment 平台的设置页中配置线上值
    💻 本地 .env☁️ 平台设置页

什么时候不用

  • 把密钥直接写进代码并提交:仓库访问者可能看到并使用这把密钥
    const key = "sk-proj-8fk2…"提交到仓库的密钥可能出现在提交历史、克隆副本或构建产物中
  • .env 发给别人:文件、截图或群聊转发都可能扩大敏感值的暴露范围
    .env→ 转发给同事 / 截图发群
    通过文件或截图分享可能暴露其中的敏感值
  • 把 Key 写进浏览器可获取的页面代码:它可能被查看或提取,不应存放服务端密钥
    右键 → 查看网页源代码<script> key="sk-…" </script>写进前端代码后,访问者可能直接读取
  • 改了 .env 不重启需要重载配置的服务:程序仍可能读取旧值
    改了 .env,直接刷新页面…401 Unauthorized(仍在使用旧 Key)
组成结构 · Anatomy
OPENAI_API_KEY=sk-proj-••••••  # 本地开发用,别提交
全大写加下划线是惯例,代码里按这个名字读
等号后面是实际配置值;包含密钥时,截图前要遮盖
# 开头,给人看的备注,程序会忽略
常见变体 · Variants
本地 .env.env
.env
本地开发使用,通常应由 .gitignore 排除
平台环境变量Platform Env
Vercel → Settings → Env
部署平台设置页里再配一份
示例模板.env.example
.env.example
告诉别人要配啥,不写真值
典型使用场景
.env 文件示例
.env🔒 不提交
# 本地开发用
OPENAI_API_KEY=sk-proj-8fk2••••••
DATABASE_URL=postgres://localhost:5432
代码读取变量名
api.js
const key = process.env.OPENAI_API_KEY;
const res = await askAI(prompt, key);
代码读取变量名;本地变更配置值通常不需要修改代码
.gitignore 忽略未跟踪文件
.gitignore
node_modules
dist
.env
🛡 匹配规则的未跟踪文件会被 git add 跳过;提交前仍要看 git status
Vercel 环境变量设置页
Environment Variables
KEY
VALUE
环境
OPENAI_API_KEY
••••••••
Production
DATABASE_URL
••••••••
Production