¿Por qué Process.env.NODE_ENV no está definido?
Estoy intentando seguir un tutorial sobre NodeJS. No creo que me haya perdido nada, pero cada vez que llamo, el process.env.NODE_ENV
único valor que obtengo es undefined
. Según mi investigación, el valor predeterminado debería ser development
. ¿Cómo se establece dinámicamente este valor y dónde se establece inicialmente?
process.env
es una referencia a su entorno, por lo que debe configurar la variable allí.
Para configurar una variable de entorno en Windows :
SET NODE_ENV=development
en macOS/OS X o Linux :
export NODE_ENV=development
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)
Entonces, esto puede ser mejor:
"start": "set NODE_ENV=dev&& node app.js"
o
console.log(process.env.NODE_ENV.trim() === 'dev') // true
Para las personas que usan *nix (Linux, OS X, etc.), no hay razón para hacerlo mediante un segundo comando de exportación, puedes encadenarlo como parte del comando de invocación:
NODE_ENV=development node server.js
Más fácil, ¿no? :)
Nos encontramos con este problema cuando trabajábamos con node en Windows.
En lugar de exigir que cualquiera 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, lo definiríamos según los métodos habituales (SET/exportar).
Puede utilizar el paquete npm cross-env . Se encargará de recortar la variable de entorno y también se asegurará de que funcione en diferentes plataformas.
En la raíz del proyecto, ejecute:
npm install cross-env
Luego, en su paquete.json, en scripts, agregue:
"start": "cross-env NODE_ENV=dev node your-app-name.js"
Luego en tu terminal, en la raíz del proyecto, inicia tu aplicación ejecutando:
npm start
La variable de entorno estará disponible en tu aplicación como process.env.NODE_ENV
, por lo que podrías hacer algo como:
if (process.env.NODE_ENV === 'dev') {
// Your dev-only logic goes here
}