Variables de entorno en Next.js, explicadas

Variables de entorno en Next.js

Variables de entorno en Next.js: .env, NEXT_PUBLIC_ | We.Inc

Cómo carga Next.js los archivos .env, en qué orden, qué hace realmente NEXT_PUBLIC_ en el build y cómo leer valores en runtime. Pega tu .env para ver qué llega al navegador.

Next.js lee los archivos .env de la raíz del proyecto y los carga en process.env. Por defecto, las variables solo existen en el servidor. Si antepones NEXT_PUBLIC_ a un nombre, Next.js copia su valor en el JavaScript del navegador durante next build, así que pasa a ser público y queda fijo hasta que vuelvas a hacer el build. Nunca pongas un secreto detrás de ese prefijo.

Orden de carga: gana el primer archivo que define una variable

Pega abajo el contenido de un archivo .env. El comprobador clasifica cada variable como solo de servidor o enviada al navegador, y señala los nombres públicos que parecen secretos. Funciona por completo en esta página; nada de lo que pegues se sube.

Preguntas frecuentes

¿Por qué mi variable de entorno es undefined en el navegador?

Sin el prefijo NEXT_PUBLIC_ una variable solo existe en el servidor, y Next.js la sustituye por una cadena vacía en el código del cliente. Añade el prefijo solo si el valor se puede publicar sin riesgo, y vuelve a hacer el build.

Cambié un valor NEXT_PUBLIC_ en mi hosting y no pasó nada. ¿Por qué?

Los valores públicos se incrustan al ejecutar next build. Un bundle desplegado conserva el valor antiguo hasta que vuelvas a hacer el build con el nuevo.

¿Funciona .env.local en los tests?

No. Cuando NODE_ENV es test, Next.js omite .env.local para que cada ejecución de tests reciba los mismos valores. Pon los valores por defecto de test en .env.test y tus overrides personales en .env.test.local.

¿Puede una variable hacer referencia a otra?

Sí. Escribe $OTHER_NAME dentro de un valor y Next.js lo expande. Si el valor necesita un signo de dólar literal, escápalo como \$.

¿Qué valor tiene NODE_ENV?

Si no lo defines, next dev usa development y el resto de comandos usan production. Los valores permitidos son production, development y test.

Qué hace realmente NEXT_PUBLIC_

Leer valores en runtime

Protégete de las fugas

Leer variables en el código

Valor solo de servidor en un Route Handler

DB_URL no tiene prefijo, así que solo existe en el servidor. Los Route Handlers y los Server Components pueden leerla sin problema.

Valor público en un Client Component

Hace falta el nombre literal completo. En el build, Next.js lo cambia por el valor, así que el navegador ve una cadena normal.

Leer un valor en cada petición

Hacer await de connection() hace que la página se renderice de forma dinámica, así que el valor viene del servidor en ejecución y no del build.

loadEnvConfig aplica el mismo orden de carga, lo que mantiene los scripts y los entornos de tests sincronizados con la app.

Comprobador de .env

Pega líneas de .env

Dónde se puede leer cada variable

Variable

Disponible en

Nota

Solo servidor

Servidor y navegador (incrustada en el build)

No es una línea de variable

El nombre parece un secreto. Todo lo que lleva NEXT_PUBLIC_ es visible para cualquier visitante.

Hace referencia a {v}, que Next.js expande.

NODE_ENV solo acepta production, development o test.

Aún no se ha encontrado ninguna variable.

{n} solo de servidor, {v} enviadas al navegador

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio