Leer variables de entorno en Node.js

Respuestas:

1879
process.env.ENV_VARIABLE

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

Consulte los documentos de Node.js paraprocess.env .

Jayesh
fuente
44
Tenga en cuenta que esto no será visible fuera del proceso de nodo y sus subprocesos. Por ejemplo, no sería visible si dispara enven otra ventana de shell mientras se ejecuta el proceso de nodo, ni en el mismo shell después de que el proceso de nodo salga.
Marko Bonaci
17
Esto también funciona para asignar variables. process.env.FOO = "foo";trabajos.
pollitos
16
Vale la pena mencionar que esto no funciona en una aplicación React. process.envse desinfecta por razones de seguridad. Solo las variables que comienzan con REACT_ENV_están disponibles. Ver: github.com/facebookincubator/create-react-app/blob/master/…
Mark Edington
77
@ MarkEdington, creo que debería serREACT_APP_
Sr. 14
55
@ Mr.14 ¡Tienes razón! Es REACT_APP_ no REACT_ENV_
Mark Edington
133

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

Subodh Ghulaxe
fuente
¿Qué lib es necesario para usar el método process.env anterior?
user_mda
3
@user_mda process.envestá integrado en la API de node.js.
Jason Axelson el
¿Debo configurar lo que quiera en el proceso.env? ¿por qué la gente lo establece allí en lugar de decir, un objeto de configuración que se requiere () 'ed por node.js?
PDN
3
process.env le da acceso al conjunto de variables de entorno a nivel del sistema operativo. Estos se pueden configurar de varias maneras y dependerán de dónde implemente 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
57

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

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

usuario2574650
fuente
¿Por qué tienes process.env['HOME']?
AlgoRythm
35

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

Evita la lógica booleana

Incluso si su archivo .env define una variable como SHOULD_SEND = false o SHOULD_SEND = 0 , los valores se convertirán en cadenas ( "false" y "0" respectivamente) y no se interpretarán como booleanos.

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 hacer comprobaciones explícitas. Descubrí que, dependiendo del nombre del entorno, es muy útil.

 db.connect({
  debug: process.env.NODE_ENV === 'development'
 });
Igor Litvinovich
fuente
1
Me gusta usar 'yes' y 'no' para los valores booleanos que deben verificarse explícitamente. Esto evita problemas en muchos lenguajes de programación.
Dogweather
22

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.

Huy Vo
fuente
99
El paquete dotenv es útil, pero la pregunta que se hace se responde leyendo process.env.ENV_VARIABLE. El paquete dovenv se trata de cargar la configuración de un archivo en el entorno.
Robert Patterson
Ese es mi punto: administrar y cargar variables env desde la envbiblioteca.
Huy Vo
1
Puede hacer lo mismo de una manera no específica de node.js utilizando la envdirutilidad.
Chris Johnson
Similar a github.com/bitrise-io/envman que tampoco es nodeespecífico.
MarkHu
1
¡me has alegrado el día! ¡Muchas gracias!
Vaha
0

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

Brad Vanderbush
fuente