Estoy tratando de usar dotenv para administrar configuraciones para diferentes entornos. Por el momento, solo tengo entorno de desarrollo. Para probar la biblioteca dotenv, tengo archivos .env y .env.development en la carpeta raíz.
En .env , tengo
PORT=5001 En .env.development , tengo
PORT=5002 En index.js , si tengo require('dotenv').config() , se carga el archivo .env y puedo ver que process.env.PORT es 5001.
Si tengo require('dotenv').config({path: '.env.'+process.env.NODE_ENV}) , y también tengo NODE_ENV=development node index.js , entonces .env.development no está cargado.
Sin embargo, si tengo require('dotenv').config({path: '.env.development'}) , el archivo .env.development se carga correctamente.
¿Puedo obtener ayuda? Gracias
Actualizar
El código de prueba que tengo es
const dotenv = require('dotenv'); const environment = process.env.NODE_ENV || 'development'; console.log(environment); const dotenvPath = '.env.'+environment; console.log(dotenvPath); dotenv.config({path: dotenvPath}); console.log(process.env.PORT); console.log(process.env.NODE_ENV);y estoy en Windows.
Cuando ejecuto set NODE_ENV=development & node index.js , el registro de la consola es
En CMD:
D:\>set NODE_ENV=development & node index.js development .env.development undefined developmentEn Powershell, es correcto.
PS D:\> $env:NODE_ENV='development'; node index.js development .env.development 5001 development Supongo que cuando pongo el comando como secuencia de comandos en package.json, el comando se ejecuta en CMD, en lugar de en Powershell, aunque ejecuto npm run start:development en Powershell.
Bueno, puede acceder a las variables de process.env DESPUÉS de ejecutar el paquete dotenv .
Entonces, cuando pasa una variable .env a su configuración, todavía no está disponible para el servidor.
Es posible. Probé en mi local siguiendo esta publicación y todo funcionó como se esperaba.
Alterne entre múltiples archivos .env como .env.development con node.js
Finalmente, encuentro la razón.
La forma en que lo depuro es tener dotenv.config({path: dotenvPath, debug: true}); en mi código y luego, cuando ejecuto set NODE_ENV=development & node index.js en CMD, obtengo
development .env.development [dotenv][DEBUG] Failed to load .env.development ENOENT: no such file or directory, open '.env.development ' undefined development Me doy cuenta del espacio en el nombre del archivo, lo que lleva a que no se pueda encontrar .env.development .
Luego cambio el comando para set NODE_ENV=development&node index.js , luego comienza a funcionar.
development .env.development 5001 development