Las variables de entorno next.js no están definidas (Next.js 10.0.5)

5 minutos de lectura

Estoy codificando un sitio web con Next.js e intenté agregar Google Tag Manager.
Seguí el tutorial en el ejemplo de Next.js Github pero por alguna razón no puedo acceder a mis variables de entorno.
Dice que mi variable no está definida.
Creé un archivo .env.local en la carpeta de mi proyecto (al mismo nivel que los componentes, node_modules, páginas, etc.)
En este archivo, creé una variable como esta (propósito de prueba):

NEXT_PUBLIC_DB_HOST=localhost

Y en mi página de índice probé este código:

console.log("test ", process.env.NEXT_PUBLIC_DB_HOST);

Pero en mi consola obtengo una “prueba indefinida”.
Traté de poner mi variable en un archivo .env en su lugar, sin éxito.
Que estoy haciendo mal ?

  • ¿Ha intentado recargar el siguiente servidor?

    – danila

    10 de febrero de 2021 a las 12:59

  • No estoy seguro de entender lo que quieres decir. Detuve lo que estaba en mi terminal vscode e hice un desarrollo de hilo nuevamente. ¿Hay algo más que hacer para recargar el siguiente servidor?

    – Florie Anstett

    10 de febrero de 2021 a las 14:36

  • Sí, solo eso. ¿No ayudó? Estás seguro que .env archivo al mismo nivel que package.json? No estoy muy seguro de qué más puede ayudar.

    – danila

    10 de febrero de 2021 a las 15:29

  • Vale, ¡soy estúpido! Encontré mi error… puse un “:” en lugar de un “=”. Estoy avergonzado…

    – Florie Anstett

    11 de febrero de 2021 a las 7:18

  • Muchas gracias, @FlorieAnstett, cometí el mismo error y perdí más de 2 horas.

    – Shadab

    29 sep 2021 a las 15:05

Avatar de usuario de Dijalma Silva
dijalma silva

Este entorno solo funciona en el lado del servidor. Para acceder a este envs en el lado del cliente, debe declarar en next.config.js

Por aquí:

module.exports = {
  reactStrictMode: true,
  env: {
    BASE_URL: process.env.BASE_URL,
  }
}

  • A partir de la versión 9.4 de Nextjs, next.config.js ya no se sugiere como estrategia de entorno. ¿Está utilizando una versión anterior de NextJS o cree que esta es la única forma de tener éxito?

    – cpre

    10 de agosto de 2021 a las 17:49

  • Estaba teniendo este problema y esto resolvió mi error mientras estaba en Next 10.0.3

    – Un Webb

    10 de agosto de 2021 a las 21:29

  • En Siguiente +9, prefije las variables usando NEXT_PUBLIC_. Esto los expondrá en el navegador.

    –Miquel Canal

    11 de febrero de 2022 a las 19:41

  • Estoy en Next 12.1 y “NEXT_PUBLIC_” no me funcionó incluso después de reiniciar el servidor. esto hizo

    –Matt Wright

    24 de febrero de 2022 a las 2:49


Avatar de usuario de Safaetul Ahasan Piyas
Safaetul Ahasan Piyas

  1. Crear .env (todos los entornos), .env.desarrollo (entorno de desarrollo), y .env.producción (entorno de producción).

  2. Agregue el prefijo NEXT_PUBLIC a todas sus variables de entorno.

NEXT_PUBLIC_API_URL=http://localhost:3000/

  1. Usar con el prefijo process.env

proceso.env.NEXT_PUBLIC_API_URL

  1. Detenga el servidor y reinícielo:

npm ejecutar dev

  1. Espero que funcione. Esta solución para la última versión de nextJs (más de 9)

Para aquellos que usan NextJS +9 y buscan variables de entorno en el navegador, deben usar el NEXT_PUBLIC_ prefijo. Ejemplo:

NEXT_PUBLIC_ANALYTICS_ID=123456789

Ver documentación de referencia.

Reiniciar el servidor funcionó para mí.

  1. Editar y guardar .env.local
  2. Detenga el servidor y reinícielo, npm run dev
  3. Debería obtener una salida en la siguiente línea como esta:
> klout@0.1.0 dev
> next dev

Loaded env from [path]/.env.local

Después de pasar innumerables horas en esto, descubrí que hay un pequeño párrafo tanto en la documentación anterior como posterior a nextjs 9.4:

palabras clave siendo TIEMPO DE CONSTRUCCIÓN. Esto significa que debe haber configurado estas variables al ejecutar next build y no (solo) en next start estar disponible para que el lado del cliente acceda a estas variables.

  • Ugh, esta fue la clave para mí. Había configurado estos vars usando un script npm, pero fue después del tiempo de compilación, pero antes de iniciar mi servidor.

    – El maestro de los rompecabezas

    24 de enero de 2022 a las 10:26

Avatar de usuario de Eric Mabo
eric mabo

Este es mi archivo next.config.js.

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  env: {
    BASE_URL: process.env.NEXT_PUBLIC_SITE_URL,
  },
};

module.exports = nextConfig;

Reinicie el servidor y funcionó bien. usando Nextjs 12.1.0 con mecanografiado

  • Ugh, esta fue la clave para mí. Había configurado estos vars usando un script npm, pero fue después del tiempo de compilación, pero antes de iniciar mi servidor.

    – El maestro de los rompecabezas

    24 de enero de 2022 a las 10:26

Avatar de usuario de Chris
cris

Agregando con la versión más reciente del documentación en esto, v12+.

Usando el archivo next.config.js puede especificar variables de servidor y cliente:

module.exports = {
  serverRuntimeConfig: {
    // Will only be available on the server side
    mySecret: 'secret',
    secondSecret: process.env.SECOND_SECRET, // Pass through env variables
  },
  publicRuntimeConfig: {
    // Will be available on both server and client
    staticFolder: '/static',
  },
}

Todavía puede usar un archivo env.local y pasar la variable al archivo next.config.js. Por ejemplo:

 publicRuntimeConfig: {
   DB_URL: process.env.DB_URL
 }

Y luego puedes acceder a la variable de esta manera:

import getConfig from 'next/config';
const { publicRuntimeConfig } = getConfig();
publicRuntimeConfig.DB_URL;

¿Ha sido útil esta solución?