.env 环境变量不生效怎么解决?process.env 读到 undefined 的 6 个原因
本地配了 .env 但 process.env 还是 undefined,常见于没重启 dev、前端变量缺 NEXT_PUBLIC_ 前缀、.env 文件名/位置不对、没装 dotenv、变量名拼错、构建平台没配。逐条给真实修复。
Published: 2026-06-03 / Updated: 2026-06-26
明明在 .env 里写了 API_KEY=xxx,代码里 process.env.API_KEY 却是 undefined——这几乎都不是玄学,而是下面 6 个具体原因之一。先按它们逐个排除。
① 改了 .env 没重启 dev(最常见)
成因:环境变量是进程启动时读进去的。dev 服务器已经在跑,你改了 .env 它不会自动重读。
修复:Ctrl+C 停掉,重新 npm run dev。这一步能解决一大半"读不到"。
② 前端变量缺 NEXT_PUBLIC_ 前缀(Next.js / Vite)
成因:出于安全,框架默认只把环境变量注入服务端。浏览器里要用的变量必须加前缀,否则在客户端永远是 undefined。
修复:
- Next.js:浏览器要读的变量改成
NEXT_PUBLIC_API_URL; - Vite:改成
VITE_API_URL,代码里用import.meta.env.VITE_API_URL。 - 密钥类(API key、token)不要加前缀,那样会泄露到前端。
③ 文件名或位置不对
成因:文件叫成了 env、.env.txt、放在了子目录,或该用 .env.local 的用了 .env。
修复:文件名就是 .env(或 .env.local),放在项目根目录(和 package.json 同级)。注意优先级:.env.local 会覆盖 .env。
④ 纯 Node 脚本没装 / 没加载 dotenv
成因:Next.js / Vite 内置读 .env,但纯 Node 脚本不会自动读,需要 dotenv。
修复:
npm install dotenv
脚本最顶部加载:
import "dotenv/config"; // 或 require("dotenv").config();
⑤ 变量名拼错 / 大小写 / 多了空格引号
成因:.env 里写成 API_KEY = xxx(等号两边空格)、加了引号、或代码里大小写对不上。
修复:.env 写成 KEY=value,等号两边不留空格、值不用加引号(除非含空格);代码里的变量名和 .env 完全一致。
⑥ 构建/部署平台没配(线上 undefined)
成因:本地 .env 不会上传(也不该上传),Vercel / CI 上没配同样的变量,所以线上读不到。
修复:在 Vercel → Settings → Environment Variables(或 CI 的 Secrets)补齐,勾对 Production 环境,重新部署才生效。
快速验证一行
node -e "require('dotenv').config(); console.log(process.env.你的变量名)"
能打印出值,说明 .env 本身没问题,问题在框架前缀或重启;打印 undefined,回到 ③⑤ 查文件和拼写。
让 Codex 辅助
我在 .env 配了 X,但 process.env.X 是 undefined。
我用的是 Next.js / Vite / 纯 Node 脚本,这个变量在服务端还是浏览器用。
请判断最可能是前缀、重启、文件位置还是平台未配,给出对应修复。
风险提醒
.env必须进.gitignore,别把密钥提交进仓库或公开。- 给前端加前缀的变量等于公开,绝不要把密钥、token 加
NEXT_PUBLIC_/VITE_。
相关工具
相关报错排查
同一套排查思路的常见报错,建议一起看:
免责声明
本文成因与修复对应 Node / Next.js / dotenv 的通用行为,供学习和排查参考;涉及客户密钥、生产环境变量时需明确授权并人工复核。
读完后可以直接用的工具
根据这篇文章的主题自动匹配,先用工具做判断,再人工复核交付。
SEO path
Continue through the same topic network
Question entrances
Use a practical tool after reading this guide
先用工具做判断,再用模板整理交付。生成内容只能作为草稿,不要不审核就直接发给客户。
Related articles
需要人工协助配置或排错?
你可以先用本站工具和模板自助排查。若确实卡在 Codex、Claude Code、GitHub、Vercel 配置或客户需求判断上,可以通过联系页咨询。服务不是主业入口,只作为少量高价值人工协助保留。
联系我