You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:42:04