Come posso impostare NODE_ENV = produzione su Windows?

In Ubuntu è abbastanza semplice; Posso eseguire l’applicazione usando:

$ NODE_ENV=production node myapp/app.js 

Tuttavia questo non funziona su Windows. Esiste un file di configurazione in cui posso impostare l’attributo?

Prova ad usare

 set NODE_ENV=production 

Questo dovrebbe essere eseguito nel prompt dei comandi in cui si intende eseguire l’applicazione Node.js.

La riga precedente imposterà la variabile di ambiente NODE_ENV per il prompt dei comandi dove si esegue il comando.

Per impostare le variabili di ambiente globalmente in modo che persistano oltre il singolo prompt dei comandi, è ansible trovare lo strumento da Sistema nel Pannello di controllo (o digitando ‘ambiente’ nella casella di ricerca nel menu di avvio).

In PowerShell:

 $env:NODE_ENV="production" 

Ho appena trovato un bel pacchetto Node.js che può aiutare molto a definire le variabili d’ambiente usando una syntax unica, multipiattaforma.

https://www.npmjs.com/package/cross-env

Ti permette di scrivere qualcosa come questo:

 cross-env NODE_ENV=production my-command 

Il che è abbastanza conveniente! Nessun comando specifico di Windows o Unix più!

Sarebbe l’ideale se fosse ansible impostare i parametri sulla stessa linea della chiamata per avviare Node.js su Windows. Guarda attentamente quanto segue, ed eseguilo esattamente come indicato:

Hai queste due opzioni:

  1. Alla riga di comando:

     set NODE_ENV=production&&npm start 

    o

     set NODE_ENV=production&&node index.js 
  2. Esegui “npm esegui start_windows” sulla riga di comando con il file package.json configurato come di seguito

     //package.json "scripts": { "start": "node index.js" "start_windows": "set NODE_ENV=production&&node index.js" } 

Il trucco per farlo funzionare su Windows è necessario rimuovere lo spazio bianco prima e dopo “&&”.

Puoi usare

 npm run env NODE_ENV=production 

Probabilmente è il modo migliore per farlo, perché è compatibile sia su Windows che su Unix.

Dalla documentazione di run-script npm :

Lo script env è uno speciale comando incorporato che può essere utilizzato per elencare le variabili di ambiente che saranno disponibili per lo script in fase di runtime. Se un comando “env” è definito nel pacchetto, avrà la precedenza sul built-in.

Se si utilizza Visual Studio con NTVS, è ansible impostare le variabili di ambiente nella pagina delle proprietà del progetto:

Proprietà di progetto di Visual Studio NTVS

Come puoi vedere, i menu a discesa Configurazione e Piattaforma sono disabilitati (non ho cercato troppo a fondo perché è così), ma se modifichi il tuo file .njsproj come segue:

   true NODE_ENV=development   true NODE_ENV=production  

Il menu a discesa “Debug / Release” controllerà quindi come viene impostata la variabile prima di avviare Node.js.

La mia esperienza con Node.js su Windows 7 64-bit in Visual Studio 2013 è che devi usare

 setx NODE_ENV development 

da una finestra di cmd. E devi riavviare Visual Studio affinché il nuovo valore venga riconosciuto.

La syntax impostata dura solo la durata della finestra cmd in cui è impostata.

Semplice test in Node.js:

 console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV); 

Restituisce ‘indefinito’ quando si utilizza set, e restituirà ‘sviluppo’ se si utilizza setx e si riavvia Visual Studio.

Per eseguire l’applicazione in PowerShell (poiché && non è consentito):

 ($env:NODE_ENV="production") -and (node myapp/app.js) 

Si noti che l’output di testo di ciò che fa il server è soppresso, e non sono sicuro che sia risolvibile. (Espansione sulla risposta di @ jsalonen.)

Giusto per chiarire, e per chiunque altro stia tirando i capelli fuori …

Se stai usando git bash su Windows , set node_env=production&& node whatever.js non sembra funzionare . Invece, usa il cmd nativo. Quindi, usando set node_env=production&& node whatever.js funziona come previsto.

Il mio caso d’uso:

Sviluppo su Windows perché il mio stream di lavoro è molto più veloce, ma dovevo assicurarmi che il middleware di sviluppo specifico della mia applicazione non si triggerssse nell’ambiente di produzione.

Ecco il metodo non a riga di comando:

In Windows 7 o 10, digitare environment nella casella di ricerca del menu Start e selezionare Modifica le variabili di ambiente del sistema.

In alternativa, accedere a Pannello di controllo \ Sistema e sicurezza \ Sistema e fare clic su Impostazioni di sistema avanzate

Questo dovrebbe aprire la finestra di dialogo Proprietà del sistema con la scheda Avanzate selezionata. In fondo, vedrai un pulsante Variabili d’ambiente …. Clicca qui

Finestra di dialogo del sistema

Si aprirà la finestra di dialogo Variabili d’ambiente.

Finestra di dialogo Variabile d'ambiente

In basso, sotto Variabili di sistema, selezionare Nuovo … Verrà aperta la finestra di dialogo Nuova variabile di sistema.

inserisci la descrizione dell'immagine qui

Immettere il nome e il valore della variabile e fare clic su OK.

Sarà necessario chiudere tutti i prompt di cmd e riavviare il server affinché la nuova variabile sia disponibile per process.env. Se ancora non viene visualizzato, riavvia il computer.

Per più variabili di ambiente, un file .env è più conveniente:

 # .env.example, committed to repo DB_HOST=localhost DB_USER=root DB_PASS=s1mpl3 
 # .env, private, .gitignore it DB_HOST=real-hostname.example.com DB_USER=real-user-name DB_PASS=REAL_PASSWORD 

È facile da usare con dotenv-safe :

  1. Installa con npm install --save dotenv-safe .
  2. Inseriscilo nel tuo codice (meglio all’inizio di index.js ) e utilizzalo direttamente con il comando process.env :
 require('dotenv').load() console.log(process.env.DB_HOST) 

Non dimenticare di ignorare il file .env nel tuo VCS .

Il tuo programma quindi fallisce rapidamente se una variabile “definita” in .env.example non è impostata come variabile d’ambiente o in .env .

questo non imposterà una variabile, ma è utile in molti casi. Non ti consiglio di usarlo per la produzione, ma dovrebbe andar bene se stai giocando con npm.

 npm install --production 

Se si utilizza il terminale GITBASH "set NODE_ENV=production" non funzionerà, cosa si può fare è digitare “export NODE_ENV=production"

primo nel tipo PowerShell

 $env:NODE_ENV="production" 

quindi digita

 node fileName.js 

Funzionerà perfettamente visualizzando tutte le uscite.