环境变量
2026年9月6日
环境变量是运行时才注入的配置:数据库地址、API Key、端口。开发和生产不应写死在同一份源码里。
系统里先看一眼
查:
# macOS / Linux / WSL
echo $PATH
# Windows cmd
echo %PATH%
# PowerShell
dir Env:*
bash
设(仅当前终端):
export XM=123 # Unix
set XM=123 # cmd
$env:XM='123' # PowerShell
bash
部署脚本、CI 里经常这么临时塞值。
npm scripts 的坑
package.json 的 scripts 在 Windows 上默认走 cmd,在 Unix 上走 sh。把 set FOO=bar && next dev 写进 scripts,在 Mac 上会挂。
cross-env 抹平:
{
"scripts": {
"dev": "cross-env DB_HOST=localhost next dev",
"build": "cross-env DB_HOST=8.8.8.8 next build"
}
}
json
变量一多,命令会变得难看。Next 项目更该用 .env 文件。
Next 的查找顺序
找到第一个就停。NODE_ENV 由框架注入:dev 是 development,build / start 是 production。
- 已经在
process.env里的 .env.$(NODE_ENV).local.env.local(test环境不读).env.$(NODE_ENV).env
常见拆法:
# .env.development.local
DB_HOST=localhost
DB_USER=root
# .env.production.local
DB_HOST=8.8.8.8
DB_USER=app
bash
.local 不进 git。仓库里留 .env.example 列名字即可。
服务端组件里直接 process.env.DB_HOST。不要把这类文件标 'use client' 再打印密码。
给浏览器的变量
只有 NEXT_PUBLIC_ 前缀会打进客户端包,构建期替换。密钥、数据库 URL 绝不要加这个前缀。
// 可以出现在浏览器
process.env.NEXT_PUBLIC_SITE_URL
// 只留服务器
process.env.DATABASE_URL
ts
改 .env 后要重启 next dev。Vercel 一类平台在控制台配同名变量,构建时注入,不必把生产密码放进仓库。
下一篇:按 Accept-Language 做路由前缀国际化。