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 ?
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
Safaetul Ahasan Piyas
-
Crear .env (todos los entornos), .env.desarrollo (entorno de desarrollo), y .env.producción (entorno de producción).
-
Agregue el prefijo NEXT_PUBLIC a todas sus variables de entorno.
NEXT_PUBLIC_API_URL=http://localhost:3000/
- Usar con el prefijo process.env
proceso.env.NEXT_PUBLIC_API_URL
- Detenga el servidor y reinícielo:
npm ejecutar dev
- 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
Reiniciar el servidor funcionó para mí.
- Editar y guardar .env.local
- Detenga el servidor y reinícielo,
npm run dev
- 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:
- (Anterior a 9.4) https://nextjs.org/docs/api-reference/next.config.js/environment-variables (igual que esta respuesta)
Next.js reemplazará process.env.customKey con ‘my-value’ en Tiempo de construcción.
- (^9.4) https://nextjs.org/docs/basic-features/environment-variables
Para mantener seguros los secretos exclusivos del servidor, Next.js reemplaza process.env.* con los valores correctos en Tiempo de construcción.
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
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
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 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 quepackage.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