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?
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?
Risposte:
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).
set NODE_ENV=production && node app
. Più comodamente configurare la package.json
conseguenza: "scripts": { "start": "set NODE_ENV=production && node app" }
.
echo %NODE_ENV%
per verificare il valore corrente.
cross-env
sia 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.
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!
In PowerShell:
$env:NODE_ENV="production"
set NODE_ENV=production
non ha funzionato per me in PowerShell ma questo ha funzionato. Grazie!
$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.
cross-env NODE_ENV=production
opzione è 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
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:
Alla riga di comando:
set NODE_ENV=production&&npm start
o
set NODE_ENV=production&&node index.js
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"
}
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.
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.
npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
e ... non è successo niente. Non sono sicuro che questo metodo funzioni su Windows.
Se si utilizza Visual Studio con NTVS, è possibile impostare le variabili di ambiente nella pagina delle proprietà del progetto:
Come puoi vedere, i menu a discesa Configurazione e Piattaforma sono disabilitati (non ho analizzato troppo il perché), ma se modifichi il .njsproj
file 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.
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.cmd
che imposta la NODE_ENV
variabile 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
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.
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
Si aprirà la finestra di dialogo Variabili d'ambiente.
In fondo, sotto Variabili di sistema, seleziona Nuovo ... Questo aprirà la finestra di dialogo Nuova variabile di sistema.
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.
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.js
funziona 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.
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.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Per più variabili di ambiente, un .env
file è 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
:
npm install --save dotenv-safe
.index.js
) e usalo direttamente con il process.env
comando :require('dotenv').load()
console.log(process.env.DB_HOST)
Non dimenticare di ignorare il .env
file 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
.
Nel caso in cui si utilizzi il terminale GITBASH
"set NODE_ENV=production"
non funzionerà, è possibile digitare "export"NODE_ENV=production"
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
Ho usato lo script npm per eseguire un'attività gulp senza "&&"
NODE_ENV = testcases npm run seed-db
Riavviare il codice VS se NODE_ENV o qualsiasi altra variabile d'ambiente non fornisce il valore corretto. Questo dovrebbe funzionare dopo il riavvio.