Come posso impostare NODE_ENV = produzione su Windows?


340

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?


Per una soluzione multipiattaforma è possibile trovare la risposta stackoverflow.com/a/57509175/11127383
Daniel Danielecki

Risposte:


486

Le versioni correnti di Windows utilizzano Powershell come shell predefinita, quindi utilizzare:

$env:NODE_ENV="production"

Di seguito la risposta di Per @ jsalonen. Se sei in CMD (che non è più gestito), usa

set NODE_ENV=production

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

La riga sopra imposta la variabile di ambiente NODE_ENV per il prompt dei comandi in cui si esegue il comando.

Per impostare le variabili di ambiente a livello globale in modo che persistano oltre il singolo prompt dei comandi, è possibile trovare lo strumento dal Sistema nel Pannello di controllo (o digitando "ambiente" nella casella di ricerca nel menu di avvio).


112
Per chi ancora alle prese con questo: set NODE_ENV=production && node app. Più comodamente configurare la package.jsonconseguenza: "scripts": { "start": "set NODE_ENV=production && node app" }.
Lampade

5
@ShuruiLiu il comando non genererà nulla, ma è possibile digitare echo %NODE_ENV%per verificare il valore corrente.
Jani Hartikainen,

169
Heads up: "set NODE_ENV = production &&" aggiunge uno spazio finale alla variabile. Avevo bisogno di "impostare NODE_ENV = produzione &&" per evitare lo spazio aggiuntivo che spezza le app del nodo come Ghost.
daw

12
@Amberlamps non è una buona soluzione perché NODE_ENV è quindi solo hardcoded per tutte le macchine; il vero obiettivo è cambiare env per macchina usando una variabile env o passare il valore dalla riga di comando, non codificarlo nel file package.json.
Alexander Mills,

6
Penso che l'utilizzo cross-envsia la soluzione migliore a questo problema se il tuo team lavora su sistemi operativi misti. La risposta di @MoOx sarebbe la mia scelta come risposta a questa domanda.
philk

230

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

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

Ti permette di scrivere qualcosa del genere:

cross-env NODE_ENV=production my-command

È abbastanza comodo! Non ci sono più comandi specifici per Windows o Unix!


25
Mentre la prima risposta è vera. Penso che questa risposta sia più affidabile e dovrebbe essere usata
d4rklit3,

Questa è un'ottima soluzione!
Kirill Gusyatin,

Semplice e risolve perfettamente il mio problema. Sono stato in grado di costruire solo su Linux. Ciò ha risolto sia Linux che Windows.
tista3,

Questa risposta merita più amore, dovrebbe essere quella accettata :)
Honza Kalfus,

Questa è la risposta migliore anche per me
knaos il

166

In PowerShell:

$env:NODE_ENV="production"

4
ps: non dimenticare i $ e le virgolette;)
George,

6
set NODE_ENV=productionnon ha funzionato per me in PowerShell ma questo ha funzionato. Grazie!
rabbia l'

6
Ho lottato un po 'per farlo funzionare da Powershell all'interno di Visual Studio Code. Ho pensato di lasciare una soluzione qui. Stavo tentando di eseguire un comando "Gulp", assicurandomi che fosse impostato il valore env corretto. Questo è ciò che finì a lavorare per me: $env:NODE_ENV="development"; gulp runMytask. Nota il punto e virgola in là. Il file gulp può utilizzare la logica condizionale su process.env.NODE_ENV. A meno che non lo imposti, sarà indefinito.
dvsoukup,

2
Solo questa soluzione funziona con Windows 10 e Webpack 3.8.1
Роман Арсеньев

1
Questo funziona perfettamente. Ma l' cross-env NODE_ENV=productionopzione è davvero una soluzione migliore se si eseguono comandi npm da package.json che richiedono l'impostazione di env. È troppo facile lasciare l'env impostato su dev / prod dopo aver usato l'opzione $ env: NODE_ENV
Drenai il

105

Sarebbe l'ideale se potessi impostare i parametri sulla stessa linea della tua 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. Il trucco per farlo funzionare su Windows è che è necessario rimuovere gli spazi bianchi prima e dopo "&&". Configurato il file package.json con start_windows (vedi sotto) di seguito. Quindi eseguire "npm run start_windows" dalla riga di comando.

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

1
DEF vorrebbe sapere come farlo funzionare in questo modo.
SC_Chupacabra,

2
Ha funzionato per me. Ho dovuto rimuovere lo spazio bianco anche se "set NODE_ENV = production && nodemon server.js"
SC_Chupacabra

2
Magari avessi letto così tanto prima di provare la risposta sopra, mi avrebbe fatto risparmiare un po 'di tempo. : \
Jeff l'

1
Su una nota vagamente correlata ho scoperto che && non funzionava come previsto su Windows quando si concatenavano più comandi insieme. In caso di dubbi, provare a utilizzare | invece
Mike

1
questo ha funzionato per me su Windows 10 a 64 bit sia da cmd che da power-shell
Ani

30

Puoi usare

npm run env NODE_ENV=production

È probabilmente il modo migliore per farlo, perché è compatibile sia con Windows che con Unix.

Dalla documentazione run-script di npm :

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


3
Come possiamo eseguire un altro comando con il set di variabili? Questo non sembra funzionare: npm run env NODE_ENV = production && echo $ NODE_ENV. Probabilmente vengono eseguiti in due diverse shell?
Jonas Kello,

1
Da quello che posso vedere, questo non funziona affatto. Dagli stessi documenti, elenca solo le variabili di ambiente, non le imposta.
Kumarharsh,

2
Non funziona per me. Elenca var, mostra la var che specifichi, ma in fase di runtime, var non è ok in process.env.YOUR_VAR ...
MoOx

3
@JonasKello si può usare questa: npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'Il --è obbligatoria . Sostituisci node -e 'console.log(process.env.NODE_ENV)'con qualunque comando tu voglia.
Pauan,

Ho provato questo con questo comando: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jse ... non è successo niente. Non sono sicuro che questo metodo funzioni su Windows.
jcollum,

14

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

Proprietà del progetto Visual Studio NTVS

Come puoi vedere, i menu a discesa Configurazione e Piattaforma sono disabilitati (non ho analizzato troppo il perché), ma se modifichi il .njsprojfile come segue:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

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


13

Ho scritto un modulo win-node-env con il quale puoi eseguire il tuo comando proprio come faresti in * nix.

NODE_ENV=production node myapp/app.js

Funziona creando un NODE_ENV.cmdche imposta la NODE_ENVvariabile d'ambiente e genera un processo figlio con il resto del comando e i suoi argomenti.

Basta installarlo (a livello globale) ed eseguire i comandi di script npm, dovrebbe automaticamente farli funzionare.

npm install -g win-node-env

esattamente quello che stavo cercando! per funzionare con gli script npm e funziona anche con altri strumenti di cli del nodo come jest. Quindi "imposta NODE_ENV = debug & cls & jest ..." è diventato "cls & NODE_ENV = debug jest"
Z. Khullah

9

La mia esperienza con Node.js su Windows 7 a 64 bit in Visual Studio 2013 è che è necessario utilizzare

setx NODE_ENV development

da una finestra cmd. E devi riavviare Visual Studio per poter riconoscere il nuovo valore.

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

Test semplice in Node.js:

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

Restituisce "non definito" quando si utilizza set e restituirà "sviluppo" se si utilizza setx e si riavvia Visual Studio.


cmd- non PowerShell? Ugh, vieni su windows, mettilo insieme.
jcollum,

la tua osservazione sul riavvio del codice VS è stata davvero utile!
Yury Kozlov,

8

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 di 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 fondo, sotto Variabili di sistema, seleziona Nuovo ... Questo aprirà la finestra di dialogo Nuova variabile di sistema.

inserisci qui la descrizione dell'immagine

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

Sarà necessario chiudere tutti i prompt cmd e riavviare il server affinché la nuova variabile sia disponibile per process.env. Se il problema persiste, riavvia il computer.


2
Grazie! Avevo fatto tutto questo ma non funzionava fino a quando non ho riavviato il server.
Marcel Lamothe,

7

Giusto per chiarire, e per chiunque altro possa strapparsi i capelli ...

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

Il mio caso d'uso:

Sviluppo su Windows perché il mio flusso di lavoro è molto più veloce, ma dovevo assicurarmi che il middleware specifico per lo sviluppo della mia applicazione non funzionasse nell'ambiente di produzione.


6

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 sta facendo il server è soppresso e non sono sicuro che sia risolvibile. (Espandendo la risposta di @ jsalonen.)


Non ha funzionato per me:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti il

4

prima nel tipo di PowerShell

$env:NODE_ENV="production"

quindi digitare

node fileName.js

Funzionerà perfettamente visualizzando tutte le uscite.


2

Per più variabili di ambiente, un .envfile è 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. Includilo nel tuo codice (meglio all'inizio di index.js) e usalo direttamente con il process.envcomando :
require('dotenv').load()
console.log(process.env.DB_HOST)   

Non dimenticare di ignorare il .envfile nel tuo VCS .

Il tuo programma quindi fallisce rapidamente se una variabile "definita" in .env.examplenon è impostata come variabile d'ambiente o in .env.


I file .env sono utili solo per i segreti e aggiungono un ulteriore livello di complessità durante l'impostazione durante l'assegnazione di nuove persone a un progetto o l'applicazione di modifiche ad essi.
coiso

@coiso Senza un luogo generico e comune, dove metti molte variabili env? O in un file di script o in un'impostazione dipendente dall'IDE, sei ancora più legato a strumenti specifici. Questo rende l'integrazione dei nuovi membri del team ancora più difficile, credo.
Dominik,

2

Nel caso in cui si utilizzi il terminale GITBASH "set NODE_ENV=production" non funzionerà, è possibile digitare "export"NODE_ENV=production"


0

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

npm install --production

0

Ho usato lo script npm per eseguire un'attività gulp senza "&&"

NODE_ENV = testcases npm run seed-db


0

Riavviare il codice VS se NODE_ENV o qualsiasi altra variabile d'ambiente non fornisce il valore corretto. Questo dovrebbe funzionare dopo il riavvio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.