Capítulo 303 de 456
Next.js carrega .env* automaticamente em process.env; variáveis prefixadas com NEXT_PUBLIC_ são inlineadas no bundle do browser em build time, as demais só existem no servidor.
.env: carregado automaticamente pro Node.js runtime, usável em getStaticProps/getServerSideProps/API routes.@next/env: pacote pra carregar as mesmas env vars fora do runtime do Next.js (ex.: config de ORM, test runner), via loadEnvConfig(projectDir).$VARIABLE dentro de .env* expande o valor de outra variável (escapar com \$ se quiser o literal).NEXT_PUBLIC_ prefix: única forma de expor uma env var ao browser; o valor é hard-coded no bundle no next build, não muda depois em runtime.process.env[varName] ou env.NEXT_PUBLIC_X (via variável intermediária) não funcionam, só a referência direta e estática process.env.NEXT_PUBLIC_X.getServerSideProps (só server) em vez de NEXT_PUBLIC_..env.test: ambiente extra além de development/production; .env.local não é carregado em testes, garantindo defaults consistentes.process.env → .env.$(NODE_ENV).local → .env.local (não em test) → .env.$(NODE_ENV) → .env.TWITTER_USER=nextjs
TWITTER_URL=https://x.com/$TWITTER_USER
.env (TWITTER_URL vira https://x.com/nextjs).// NÃO será inlineado, porque usa variável
const varName = 'NEXT_PUBLIC_ANALYTICS_ID'
setupAnalyticsService(process.env[varName])
| Ordem | Fonte |
|---|---|
| 1 | process.env |
| 2 | .env.$(NODE_ENV).local |
| 3 | .env.local (ignorado se NODE_ENV=test) |
| 4 | .env.$(NODE_ENV) |
| 5 | .env |
| Versão | Mudança |
|---|---|
| v9.4.0 | Suporte a .env e NEXT_PUBLIC_ introduzido |
.env* com segredo: create-next-app já ignora por padrão no .gitignore, manter assim.NEXT_PUBLIC_ mudar sem rebuild: valor é congelado em build time; promover a mesma imagem/slug entre ambientes não muda esses valores.Cache-Control esperando runtime env: pra valor realmente dinâmico por ambiente, usar getServerSideProps ou API própria, nunca NEXT_PUBLIC_.NEXT_PUBLIC_* chega ao browser, e isso acontece em build time (valor fixo, não runtime).@next/env + loadEnvConfig é o jeito oficial de reusar as mesmas env vars fora do Next.js runtime (ORM configs, testes)..env.test ignora .env.local de propósito, pra testes serem determinísticos entre execuções.