2012-06-19 36 views
89

Estoy intentando seguir un tutorial sobre NodeJs. No creo que me haya perdido nada, pero cada vez que llamo al process.env.NODE_ENV, el único valor que obtengo es indefinido. De acuerdo con mi investigación, el valor predeterminado debería ser 'desarrollo'. ¿Cómo se establece dinámicamente este valor y dónde se establece inicialmente?process.env.NODE_ENV no está definido

+0

para establecer NODE_ENV para aplicaciones heroku puede utilizar: 'heroku config: set NODE_ENV = "producción"' –

+3

Aunque las respuestas a continuación van a resolver el problema temporalmente estableciendo la variable de entorno, la lección más grande aquí debería ser que nunca se puede saber si se establecerá alguna variable de entorno ... Así que escriba su código en consecuencia y compruebe si está configurado y, de ser así, a qué. No hagas suposiciones al respecto. –

Respuesta

124

process.env es una referencia a su entorno, por lo que debe establecer la variable allí.

Para establecer una environment variable in Windows:

SET NODE_ENV=development 

en OS X o Linux:

export NODE_ENV=development 
+0

Esto funcionó, solo en mi sistema operativo X la palabra 'EXPORT' debe ser minúscula. Gracias. – basheps

+3

puede agregar que si NODE_ENV no está configurado, la aplicación se comporta como en el modo "desarrollo" – Rocco

+1

Para Linux, vi ~/.bash_profile, luego inserte NODE_ENV = desarrollo y guárdela. – stonyau

2

También puede configurar por código, por ejemplo:

process.env.NODE_ENV = 'test';

+33

I desaconseja firmemente que alguien cambie el identificador de entorno en la lógica de la aplicación. Nunca querrás que la aplicación piense de repente que es algo más de lo que realmente es. Esto solo debería cambiarse a nivel del sistema, como sugieren muchas de las otras respuestas. – Kafoso

+2

Es posible que desee leer acerca de 12 aplicaciones de factores: https://12factor.net/config. Este código sería una violación de eso. Hay buenas razones para mantener su configuración separada de su código. – jcollum

+0

¡Interesante las 12 aplicaciones Factor! ¡Seguid así! – joaquindev

5

En Uso de UBUNTU:

$ exportación NODE_ENV = prueba

+0

funcionó como un encanto, gracias! –

37

Para las personas que utilizan * nix (Linux, OS X, etc.), no hay razón para hacerlo a través de un segundo comando de exportación, se pueden encadenar como parte del comando de invocación:

NODE_ENV=development node server.js 

Más fácil, ¿no? :)

+0

Muy bueno saber – basheps

+1

Un paquete como cross-env también permitirá que funcione en Windows. – walkerrandophsmith

18

Nos encontramos con este problema cuando trabajamos con node en Windows.

En lugar de requerir que alguien que intente ejecutar la aplicación establezca estas variables, proporcionamos una alternativa dentro de la aplicación.

var environment = process.env.NODE_ENV || 'development'; 

En un entorno de producción, que lo definiría por los métodos habituales (SET/exportación).

28

consejos

en package.json:

"scripts": { 
    "start": "set NODE_ENV=dev && node app.js" 
} 

en app.js:

console.log(process.env.NODE_ENV) // dev 
console.log(process.env.NODE_ENV === 'dev') // false 
console.log(process.env.NODE_ENV.length) // 4 (including a space at the end) 

así, esto puede mejor:

"start": "set NODE_ENV=dev&& node app.js" 

o

console.log(process.env.NODE_ENV.trim() === 'dev') // true