Leer variables de entorno en Node.js

1406

¿Hay alguna forma de leer las variables de entorno en el código de Node.js?

Como por ejemplo Python os.environ['HOME'].

1
  • ¿qué pasa si el mismo requisito con react js? Ashish Kumar 15 sep.2020 a las 20:00
2004
process.env.ENV_VARIABLE

¿Dónde ENV_VARIABLEestá el nombre de la variable a la que desea acceder?

Consulte la documentación de Node.js paraprocess.env .

8
  • 5
    Tenga en cuenta que esto no será visible fuera del proceso del nodo y sus subprocesos. Por ejemplo, no sería visible si dispara enven otra ventana de shell mientras se está ejecutando el proceso del nodo, ni en el mismo shell después de que finaliza el proceso del nodo. Marko Bonaci 30 de mayo de 2015 a las 10:10
  • 22
    esto también funciona para asignar variables. process.env.FOO = "foo";obras. chicks 11/09/15 a las 17:16
  • 25
    Vale la pena mencionar que esto no funciona en una aplicación React. process.envestá desinfectado por razones de seguridad. Solo REACT_ENV_están disponibles las variables que comienzan con . Ver: github.com/facebookincubator/create-react-app/blob/master/…Mark Edington 11/07/2017 a las 12:25
  • 11
    @MarkEdington creo que debería serREACT_APP_Mr. 14 19/10/2017 a las 15:35
  • 5
    @ Mr.14 ¡Tienes razón! Es REACT_APP_ no REACT_ENV_Mark Edington 20 oct 2017 a las 18:17
152

Al usar Node.js , puede recuperar variables de entorno por clave del process.envobjeto:

por ejemplo

var mode   = process.env.NODE_ENV;
var apiKey = process.env.apiKey; // '42348901293989849243'

Aquí está la respuesta que explicará la configuración de variables de entorno en node.js

4
  • 1
    ¿Qué lib se requiere para utilizar el método process.env anterior? user_mda 1/11/15 a las 19:27
  • 5
    @user_mda process.envestá integrado en la api de node.js. Jason Axelson 20 de enero de 2016 a las 1:47
  • ¿Debo configurar lo que quiera en process.env? ¿Por qué la gente lo coloca allí en lugar de decir, un objeto de configuración que requiere () 'editado por node.js? PDN 27/04/2016 a las 1:05
  • 4
    process.env le da acceso al conjunto de variables de entorno a nivel de sistema operativo. Estos se pueden configurar de varias maneras y dependerán de dónde esté implementando su aplicación. Por ejemplo, a menudo ejecuto mi aplicación local usando NODE_ENV = desarrollo NODE_PATH = lib node server.js. Entonces process.env.NODE_PATH devolverá 'lib'NectarSoft 6 de mayo de 2016 a las 19:22
63

Si desea usar una clave de cadena generada en su programa Node.js, digamos, var v = 'HOME'puede usar process.env[v].

De lo contrario, process.env.VARNAMEdebe estar codificado en su programa.

1
  • 1
    ¿Por qué tienes process.env['HOME']? AlgoRythm 12/09/19 a las 23:52
53

Para recuperar variables de entorno en Node.JS, puede usar process.env.VARIABLE_NAME , pero no olvide que la asignación de una propiedad en process.env convertirá implícitamente el valor en una cadena.

Evite la lógica booleana

Even if your .env file defines a variable like SHOULD_SEND=false or SHOULD_SEND=0, the values will be converted to strings (“false” and “0” respectively) and not interpreted as booleans.

if (process.env.SHOULD_SEND) {
 mailer.send();
} else {
  console.log("this won't be reached with values like false and 0");
}

En su lugar, debe realizar comprobaciones explícitas. Descubrí que dependiendo del nombre del entorno es muy útil.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });
1
  • 2
    Me gusta usar 'sí' y 'no' para las variables de entorno booleanas que deben verificarse explícitamente. Esto evita problemas en muchos lenguajes de programación. Dogweather 24 de agosto de 2019 a las 4:23
37

Puede usar el paquete env para administrar sus variables de entorno por proyecto:

  • Cree un .envarchivo en el directorio del proyecto y coloque todas sus variables allí.
  • Agregue esta línea en la parte superior del archivo de entrada de su aplicación:
    require('dotenv').config();

Hecho. Ahora puede acceder a sus variables de entorno con process.env.ENV_NAME.

4
  • 11
    El paquete dotenv es útil, pero la pregunta se responde leyendo process.env.ENV_VARIABLE. El paquete dovenv se trata de cargar la configuración de un archivo al entorno. Robert Patterson 11 de mayo de 2018 a las 14:40
  • 1
    Ese es mi punto: administrar y cargar variables env desde la envbiblioteca. Huy Vo 11 de mayo de 2018 a las 15:38
  • 1
    Puede hacer lo mismo de una manera no específica de node.js usando la envdirutilidad. Chris Johnson 23/06/18 a las 18:23
  • Similar a github.com/bitrise-io/envman, que tampoco es nodeespecífico. MarkHu 1 dic 2018 a las 2:30
4

Si desea ver todas las Variables de entorno en el tiempo de ejecución, simplemente escriba en algún archivo nodejs como server.js:

console.log(process.env);

-1

¿Por qué no utilizarlos en el directorio Usuarios del .bash_profilearchivo, para que no tenga que enviar ningún archivo con sus variables a producción?

1
  • La razón es porque si lo usa .bash_profile, lo configurará para el entorno de ese usuario, pero si está ejecutando varias instancias allí, entonces debe configurar múltiples variables env para eso en lugar de tener una sola. Por ejemplo, si establece la variable PORT, debe hacerlo como PORT_1, ... pero si la usa a través de .env, puede usar el mismo código con el archivo .env que tiene un número de PORT diferente. Raheel Shahzad 30/07/20 a las 6:44