2012-06-19 15 views
89

Sto provando a seguire un tutorial su NodeJs. Non credo di aver perso nulla, ma ogni volta che chiamo lo process.env.NODE_ENV l'unico valore che ottengo non è definito. Secondo la mia ricerca il valore predefinito dovrebbe essere "sviluppo". Come viene impostato dinamicamente questo valore e dove viene impostato inizialmente?process.env.NODE_ENV non è definito

+0

per impostare NODE_ENV per le applicazioni Heroku è possibile utilizzare: 'Heroku config: impostare NODE_ENV = "produzione"' –

+3

Anche se le risposte di seguito risolveranno il problema temporaneamente impostando la variabile d'ambiente, la più grande lezione qui dovrebbe essere che non si può mai sapere se una variabile d'ambiente sarà impostata ... Quindi scrivi il tuo codice di conseguenza e verifica se è impostato e, in caso affermativo, a cosa. Non fare supposizioni a riguardo. –

risposta

124

process.env è un riferimento al proprio ambiente, quindi è necessario impostare la variabile lì.

Per impostare un environment variable in Windows:

SET NODE_ENV=development 

su OS X o Linux:

export NODE_ENV=development 
+0

Questo ha funzionato, solo sul mio OS X la parola "EXPORT" doveva essere in minuscolo. Grazie. – basheps

+3

potresti aggiungere che se NODE_ENV non è impostato l'app si comporta come in modalità "sviluppo" – Rocco

+1

Per Linux, vi ~/.bash_profile, quindi inserisci NODE_ENV = sviluppo e salva. – stonyau

2

È inoltre possibile impostare da codice, ad esempio:

process.env.NODE_ENV = 'test';

+33

I FORTEMENTE scoraggia chiunque a cambiare l'identificatore dell'ambiente nella logica dell'applicazione. Non vuoi mai che l'applicazione improvvisamente pensi che sia qualcos'altro che non sia realmente. Questo dovrebbe essere sempre modificato a livello di sistema, come suggeriscono molte altre risposte. – Kafoso

+2

Si potrebbe voler leggere circa 12 app di fattori: https://12factor.net/config. Questo codice sarebbe una violazione di ciò. Ci sono buoni motivi per mantenere la tua configurazione separata dal tuo codice. – jcollum

+0

Interessanti le app di 12 fattori! Continuate così! – joaquindev

5

In Utilizzare UBUNTU:

$ export NODE_ENV = test

+0

ha funzionato come un fascino, grazie! –

37

Per le persone che utilizzano * nix (Linux, OS X, ecc), non c'è ragione di farlo tramite un secondo comando di esportazione, è possibile concatenare come parte del comando invocando:

NODE_ENV=development node server.js 

Più facile, no? :)

+0

Molto buono a sapersi. – basheps

+1

Un pacchetto come cross-env consentirà di funzionare anche su Windows. – walkerrandophsmith

18

Abbiamo riscontrato questo problema quando si lavora con il nodo su Windows.

Piuttosto che richiedere a chiunque tenti di eseguire l'app per impostare queste variabili, abbiamo fornito un fallback all'interno dell'applicazione.

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

In un ambiente di produzione, lo definiremmo con i metodi usuali (SET/export).

28

suggerimenti

in package.json:

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

in 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) 

così, questo può meglio:

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

o

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