El archivo dotenv no está cargando variables de entorno

5 minutos de lectura

avatar de usuario
unchiconuevoenlaciudad

Tengo un archivo .env en carpeta raíz expediente

NODE_ENV=development
NODE_HOST=localhost
NODE_PORT=4000
NODE_HTTPS=false
DB_HOST=localhost
DB_USERNAME=user
DB_PASSWORD=user

Y server.js archivo en el root/app/config/server.js carpeta. La primera línea de server.js el archivo es

require('dotenv').config();

También intenté lo siguiente:

require('dotenv').config({path: '../.env'});

require('dotenv').config({path: '../../.env'});

Sin embargo, mi variable env no se carga cuando ejecuto el server.js archivo de símbolo del sistema

node root/app/config/server.js

si uso el estudio visual y presiona F5se carga!!

No estoy seguro de lo que estoy haciendo mal, lo que me estoy perdiendo. Cualquier sugerencia es muy apreciada. Gracias.

  • El directorio de trabajo actual puede ser una pista para usted.

    – zerkms

    20 de febrero de 2017 a las 1:17

  • Hola @zerkms, no estoy seguro de seguirte.

    – Un chico nuevo en la ciudad

    20 de febrero de 2017 a las 1:19

  • Está bien. Que es ../.env? Es un camino relativo. Eso es relativo a… ¿qué?

    – zerkms

    20 de febrero de 2017 a las 1:34


  • O podría usar rutas absolutas en su lugar y no confiar en el valor del directorio de trabajo actual: nodejs.org/docs/latest/api/globals.html#globals_dirname

    – zerkms

    20 de febrero de 2017 a las 2:02

  • A menos que en su caso no sea un require.

    – zerkms

    20 de febrero de 2017 a las 2:17

Esto resolvió mis problemas en Node v8.14.1:

const path = require('path')
require('dotenv').config({ path: path.resolve(__dirname, '../.env') })

simplemente haciendo require('dotenv').config({path:__dirname+'/./../../.env'}) resultó en una ubicación que se resolvió como /some/path/to/env/./../../.env

  • Gracias por la resolución y funcionó para mí. En mi caso, creé un archivo en la carpeta del controlador e intenté generar el require(‘dotenv’).config() –> Me mostraba “c:\users\..\controller\.env”. Realmente molesto, por qué hace referencia a la carpeta del controlador en lugar de a la ruta raíz. Pero cuando se probó con la ruta absoluta (solo para una solución temporal), funcionó.

    – ceniza sarkar

    12 de agosto de 2019 a las 18:31

  • @ashishsarkar: ¿cómo se ve la cadena de ruta? dentro de tu config ¿método?

    – DavidP

    14 de agosto de 2019 a las 7:47

  • @DavidP Finalmente, la solución funciona, ¿ese enfoque también funciona bien en producción?

    – Goran_Ilic_Ilke

    8 de febrero de 2021 a las 15:07

  • @Goran_Ilic_Ilke: suponiendo que su producto tenga la misma estructura, entonces debería.

    – DavidP

    8 de febrero de 2021 a las 15:13

avatar de usuario
cero_cool

Si estás invocando dotenv de un archivo anidado, y su .env está en la raíz del proyecto, la forma en que desea conectar los puntos es a través de lo siguiente:

require('dotenv').config({path:'relative/path/to/your/.env'})

  • AFAIK, dotenv toma solo una ruta absoluta y tenga en cuenta una ruta relativa.

    – kapad

    31 de agosto de 2018 a las 11:37

  • tienes razón… pero la ruta es relativa al lugar desde donde se ejecuta el proceso, y no al archivo en el que se llama a dotenv. Eso fue lo que sucedió cuando estaba depurando esto.

    – kapad

    1 de septiembre de 2018 a las 13:01

  • Esto solucionó mi problema con las variables .env “indefinidas”. Incluso tengo otro proyecto ejecutándose con la misma configuración exacta para configurar el servidor y dotenv y no pude hacerlo funcionar sin definir explícitamente la ruta.

    –Tony Drummond

    9 de noviembre de 2020 a las 14:48

  • ¿Cuál “respuesta anterior”?

    – Dan Dascalescu

    1 de junio de 2021 a las 10:52

  • Hay tantas respuestas, no estoy seguro en este momento. Actualizaré el texto para reflejar que esta es una posible solución. Ha funcionado para la gente que comenta aquí.

    – cero_cool

    04/06/2021 a las 22:55

Aquí hay una solución de una sola línea:

require('dotenv').config({ path: require('find-config')('.env') })

Esto recurrirá a los directorios principales hasta que encuentre un archivo .env para usar.

También puede utilizar alternativamente este módulo llamado clave inspirado en una línea anterior.

Archivo .env del directorio principal.

# dotenv sample content
USER=sample@gmail.com
PASSWORD=iampassword123
API_KEY=1234567890

algún archivo js del subdirectorio

const ck = require('ckey');

const userName = ck.USER;     // sample@gmail.com
const password = ck.PASSWORD; // iampassword123
const apiKey   = ck.API_KEY;  // 1234567890

  • AFAIK, dotenv toma solo una ruta absoluta y tenga en cuenta una ruta relativa.

    – kapad

    31 de agosto de 2018 a las 11:37

  • tienes razón… pero la ruta es relativa al lugar desde donde se ejecuta el proceso, y no al archivo en el que se llama a dotenv. Eso fue lo que sucedió cuando estaba depurando esto.

    – kapad

    1 de septiembre de 2018 a las 13:01

  • Esto solucionó mi problema con las variables .env “indefinidas”. Incluso tengo otro proyecto ejecutándose con la misma configuración exacta para configurar el servidor y dotenv y no pude hacerlo funcionar sin definir explícitamente la ruta.

    –Tony Drummond

    9 de noviembre de 2020 a las 14:48

  • ¿Cuál “respuesta anterior”?

    – Dan Dascalescu

    1 de junio de 2021 a las 10:52

  • Hay tantas respuestas, no estoy seguro en este momento. Actualizaré el texto para reflejar que esta es una posible solución. Ha funcionado para la gente que comenta aquí.

    – cero_cool

    04/06/2021 a las 22:55

avatar de usuario
thiago-clubedochaveiro

Me tomó algunos rasguños en la cabeza, y la sugerencia de registrar el resultado de la instrucción require en la consola fue realmente útil. console.log(require('dotenv').config());

Resulta que estaba ejecutando mi aplicación desde mi usuario/directorio con nodemon application_name/. y eso hacía que dotenv buscara el archivo .env en mi directorio de inicio en lugar de en el de la aplicación. Me dio flojera saltarme uno cd y eso me costo unos minutos lmao. Nota personal: haga un alias para cd en el directorio de la aplicación y ejecútelo

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad