NextJS生产环境下环境变量与密钥部署疑问
Next.js多环境部署:服务器端环境变量与密钥的正确用法
核心规则先明确
- 带
NEXT_PUBLIC_前缀的变量:完全公开,会被打包进客户端代码,仅用于存储非敏感配置(比如API基础地址、网站名称),可放心存入.env.development/.env.production并提交至版本控制系统(VCS)。 - 无
NEXT_PUBLIC_前缀的变量:仅服务器端可用(如API路由、getServerSideProps、Server Components等场景),编译时不会暴露给客户端,但敏感密钥绝对不能提交到VCS。
敏感密钥能不能存.env文件?
可以存,但有严格限制:
- 这类密钥只能放在**本地的
.env或.env.local**文件中,且必须将这两个文件加入.gitignore,绝对不能提交到版本库。 - 生产环境严禁用
.env.production存敏感密钥,一旦提交,密钥会直接泄露。
正确的多环境部署方案
1. 本地开发环境
- 非敏感配置:写入
.env.development并提交VCS,供团队成员共享(比如开发环境API地址)。 - 敏感密钥:写入本地的
.env.local,加入.gitignore,由开发者自行配置个人本地密钥(比如本地数据库密码)。
2. 生产/预发布环境
- 非敏感配置:可写入
.env.production并提交VCS(比如生产环境API基础地址)。 - 敏感密钥:绝对不能写入任何.env文件,必须通过部署平台的「运行时环境变量」功能配置(比如Vercel的环境变量面板、Docker的
--env参数等)。部署时平台会将变量注入运行环境,代码中直接用process.env.DB_PASSWORD、process.env.NEXTAUTH_SECRET调用即可。
额外注意点
- 若使用Next.js静态生成(SSG)或增量静态再生(ISR),无前缀变量仅在构建阶段的服务器端代码中可用,不会被注入到最终生成的静态文件里,无需担心泄露。
- 永远不要在客户端代码(如Client Components、浏览器端运行的JS)中尝试调用无前缀变量,即便看起来不会暴露,也属于风险操作。
内容的提问来源于stack exchange,提问作者KJ0797
相关产品推荐
相关产品推荐

