De acuerdo con la documentación de nextjs , si quiero exponer mis variables de entorno al navegador , simplemente puedo prefijarlas con NEXT_PUBLIC en mi archivo .env.local , así:
NEXT_PUBLIC_VAR=7 Sin embargo, parece que también puedo exponer mis variables de entorno al navegador usando next.config.js , así:
module.exports = { env: { PUBLIC_VAR: process.env.PUBLIC_VAR, }, }Y esto se agregará al paquete de javascript
¿Cuál es la diferencia entre estas dos estrategias?
NEXT_PUBLIC es una nueva característica añadida. Antes, para configurar las variables de entorno, teníamos que configurar tanto para el servidor como para el cliente.
Las variables de entorno que se colocan en el archivo .env estarían disponibles solo en el lado del servidor, si desea que sus variables env estén disponibles en el lado del cliente, debe usar next.config.js . Seguimos el principio de separación de preocupaciones aquí.
Con NEXT_PUBLIC , las variables env estarán disponibles tanto del lado del cliente como del lado del servidor. Las variables env que se establecen con NEXT_PUBLIC se expondrán al navegador.
Entonces, en resumen, agregar el prefijo NEXT_PUBLIC a sus variables de entorno tendrá el mismo efecto de exponer al navegador sus variables de entorno que exponerlas a través next.config.js .
No hay mucha diferencia.
prueba esto:
colóquelo en el archivo .env o env.development. NO a next.config.js
MY_VAR=10entonces ejecuta esto:
console.log("MY var",process.env.MY_VAR); tanto dentro del componente del cliente como de la función getServerSideProps . si revisa la consola del navegador, obtendrá undefined , pero en la terminal verá
MY var 10La diferencia entre los dos es que uno de ellos usa un archivo .env mientras que el otro usa el archivo next.config. Desde Next.js 9.4, ahora se admite la carga de variables de entorno con archivos .env.
Sin embargo, para aclarar una cosa en su pregunta, todas las variables de entorno dentro del archivo .env no tienen que tener el prefijo NEXT_PUBLIC , solo las que desea exponer al navegador, cualquiera sin ese prefijo solo será accesible en el servidor.