Aktuelle Windows-Versionen verwenden Powershell als Standard-Shell. Verwenden Sie daher:
$env:NODE_ENV="production"
Per @ jsalonens Antwort unten. Wenn Sie sich in CMD befinden (das nicht mehr verwaltet wird), verwenden Sie
set NODE_ENV=production
Dies sollte an der Eingabeaufforderung ausgeführt werden, an der Sie Ihre Node.js-Anwendung ausführen möchten.
In der obigen Zeile wird die Umgebungsvariable NODE_ENV für die Eingabeaufforderung festgelegt, an der Sie den Befehl ausführen.
Um Umgebungsvariablen global so festzulegen, dass sie über die einzelne Eingabeaufforderung hinaus bestehen, finden Sie das Tool in der Systemsteuerung im System (oder indem Sie im Startmenü "Umgebung" in das Suchfeld eingeben).
Für alle, die noch damit zu kämpfen haben : set NODE_ENV=production && node app. Konfigurieren Sie Ihre bequemer package.jsonentsprechend : "scripts": { "start": "set NODE_ENV=production && node app" }.
Amberlamps
5
@ShuruiLiu Der Befehl gibt nichts aus, aber Sie können eingeben echo %NODE_ENV%, um den aktuellen Wert zu überprüfen.
Jani Hartikainen
169
Heads up: "set NODE_ENV = Production &&" fügt der Variablen ein nachfolgendes Leerzeichen hinzu. Ich brauchte "set NODE_ENV = Production &&", um den zusätzlichen Speicherplatz zu vermeiden, der Knoten-Apps wie Ghost zerstört.
Morgen,
12
@Amberlamps das ist keine gute Lösung, da der NODE_ENV dann nur für alle Maschinen fest codiert ist; Das eigentliche Ziel besteht darin, die Umgebung mithilfe einer Umgebungsvariablen maschinell zu ändern oder den Wert in der Befehlszeile zu übergeben und nicht in der Datei package.json fest zu codieren.
Alexander Mills
6
Ich denke, die Verwendung cross-envist die bessere Lösung für dieses Problem, wenn Ihr Team mit gemischten Betriebssystemen arbeitet. Die Antwort von @MoOx wäre meine Wahl als Antwort auf diese Frage.
Philk
229
Ich habe gerade ein nettes Node.js-Paket gefunden, das viel dazu beitragen kann, Umgebungsvariablen mithilfe einer einzigartigen, plattformübergreifenden Syntax zu definieren.
ps: vergiss nicht das $ und die Anführungszeichen;)
George
6
set NODE_ENV=productionhat bei Powershell nicht für mich funktioniert, aber das hat funktioniert. Vielen Dank!
Wut
6
Ich habe mich ein wenig bemüht, dies von Powershell in Visual Studio Code zum Laufen zu bringen. Ich dachte, ich würde die Lösung hier lassen. Ich habe versucht, einen "Gulp" -Befehl auszuführen, während sichergestellt wurde, dass der richtige env-Wert festgelegt wurde. Das ist es, was für mich funktioniert hat : $env:NODE_ENV="development"; gulp runMytask. Beachten Sie das Semikolon dort. Die gulp-Datei kann eine bedingte Logik für process.env.NODE_ENV verwenden. Wenn Sie es nicht einstellen, ist es undefiniert.
dvsoukup
2
Nur diese Lösung funktioniert für mich mit Windows 10 und Webpack 3.8.1
Арсеньев
1
Das funktioniert perfekt. Die cross-env NODE_ENV=productionOption ist jedoch eine bessere Lösung, wenn npm-Befehle aus package.json ausgeführt werden, für die die Umgebung festgelegt werden muss. Es ist zu einfach, die Umgebung auf dev / prod zu setzen, nachdem die Option $ env: NODE_ENV
Drenai
105
Es wäre ideal, wenn Sie Parameter in derselben Zeile wie Ihr Aufruf zum Starten von Node.js unter Windows festlegen könnten. Schauen Sie sich Folgendes genau an und führen Sie es genau wie angegeben aus:
Sie haben zwei Möglichkeiten:
In der Befehlszeile:
set NODE_ENV=production&&npm start
oder
set NODE_ENV=production&&node index.js
Der Trick, damit es unter Windows funktioniert, besteht darin, das Leerzeichen vor und nach dem "&&" zu entfernen. Konfigurieren Sie Ihre package.json-Datei mit start_windows (siehe unten) unten. Führen Sie dann "npm run start_windows" in der Befehlszeile aus.
Hat für mich gearbeitet. Musste das Leerzeichen entfernen, obwohl "Setze NODE_ENV = Produktion && nodemon server.js"
SC_Chupacabra
2
Ich wünschte, ich hätte so weit vorgelesen, bevor ich die obige Antwort ausprobiert hätte, hätte mir etwas Zeit gespart. : \
Jeff
1
In einem vagen Zusammenhang stellte ich fest, dass && unter Windows nicht wie erwartet funktionierte, wenn mehrere Befehle miteinander verkettet wurden. Im Zweifelsfall versuchen Sie es mit | stattdessen
Mike
1
Dies funktionierte für mich auf Windows 10 64-Bit-Computer von cmd und Power-Shell
Ani
30
Sie können verwenden
npm run env NODE_ENV=production
Dies ist wahrscheinlich der beste Weg, da es sowohl unter Windows als auch unter Unix kompatibel ist.
Das env-Skript ist ein spezieller integrierter Befehl, mit dem Umgebungsvariablen aufgelistet werden können, die dem Skript zur Laufzeit zur Verfügung stehen. Wenn in Ihrem Paket ein "env" -Befehl definiert ist, hat dieser Vorrang vor dem integrierten.
Wie können wir einen anderen Befehl mit der eingestellten Variablen ausführen? Dies scheint nicht zu funktionieren: npm run env NODE_ENV = Produktion && echo $ NODE_ENV. Wahrscheinlich werden sie in zwei verschiedenen Schalen ausgeführt?
Jonas Kello
1
Soweit ich sehen kann, funktioniert dies überhaupt nicht. Aus der Dokumentation selbst, Es ist nur die Auflistung von Umgebungsvariablen, das Setzen von ihnen nicht.
Kumarshar
2
Funktioniert bei mir nicht Es listet vars auf, zeigt die von Ihnen angegebene var an, aber zur Laufzeit ist var in
process.env.YOUR_VAR
3
@ JonasKello Sie würden dies verwenden: npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'Das --ist obligatorisch . Ersetzen Sie node -e 'console.log(process.env.NODE_ENV)'durch einen beliebigen Befehl.
Pauan
Versuchte dies mit diesem Befehl: npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsund ... nichts ist passiert. Ich bin nicht sicher, ob diese Methode unter Windows funktioniert.
JCollum
14
Wenn Sie Visual Studio mit NTVS verwenden, können Sie die Umgebungsvariablen auf der Projekteigenschaftenseite festlegen:
Wie Sie sehen können, sind die Dropdown-Listen "Konfiguration" und "Plattform" deaktiviert (ich habe nicht zu genau untersucht, warum dies so ist). Wenn Sie Ihre .njsprojDatei jedoch wie folgt bearbeiten :
Ich habe ein Modul win-node-env geschrieben, mit dem Sie Ihren Befehl wie in * nix ausführen können.
NODE_ENV=production node myapp/app.js
Es erstellt eine NODE_ENV.cmd, die die NODE_ENVUmgebungsvariable festlegt und einen untergeordneten Prozess mit dem Rest des Befehls und seinen Argumenten erzeugt.
Installieren Sie es einfach (global) und führen Sie Ihre npm-Skriptbefehle aus. Es sollte automatisch funktionieren.
genau das, wonach ich gesucht habe! mit npm-Skripten auszuführen, und es funktioniert sogar mit anderen Node-CLI-Tools wie Jest. Also wurde "set NODE_ENV = debug & cls & jest ..." zu "cls & NODE_ENV = debug jest"
Z. Khullah
9
Meine Erfahrung mit Node.js unter Windows 7 64-Bit in Visual Studio 2013 ist, dass Sie verwenden müssen
setx NODE_ENV development
aus einem cmd-Fenster. UND Sie müssen Visual Studio neu starten, damit der neue Wert erkannt wird.
Die festgelegte Syntax gilt nur für die Dauer des cmd-Fensters, in dem sie festgelegt ist.
cmd- keine Powershell? Ugh, komm an die Fenster, bring es zusammen.
JCollum
Ihre Bemerkung zum Neustart von VS-Code war wirklich nützlich!
Yury Kozlov
8
Hier ist die Nicht-Befehlszeilenmethode:
Geben Sie unter Windows 7 oder 10 Umgebung in das Suchfeld des Startmenüs ein und wählen Sie Systemumgebungsvariablen bearbeiten.
Navigieren Sie alternativ zu Systemsteuerung \ System und Sicherheit \ System und klicken Sie auf Erweiterte Systemeinstellungen
Dies sollte das Dialogfeld Systemeigenschaften mit der ausgewählten Registerkarte Erweitert öffnen. Unten sehen Sie eine Schaltfläche Umgebungsvariablen. Klicke hier.
Das Dialogfeld Umgebungsvariablen wird geöffnet.
Wählen Sie unten unter Systemvariablen die Option Neu aus. Dadurch wird das Dialogfeld Neue Systemvariable geöffnet.
Geben Sie den Variablennamen und den Wert ein und klicken Sie auf OK.
Sie müssen alle cmd-Eingabeaufforderungen schließen und Ihren Server neu starten, damit die neue Variable für process.env verfügbar ist. Wenn es immer noch nicht angezeigt wird, starten Sie Ihren Computer neu.
Vielen Dank! Ich hatte das alles getan, aber es funktionierte nicht, bis ich den Server neu startete.
Marcel Lamothe
7
Nur zur Klarstellung und für alle anderen, die sich die Haare ausreißen ...
Wenn Sie Git Bash unter Windows verwenden , set node_env=production&& node whatever.jsscheint dies nicht zu funktionieren . Verwenden Sie stattdessen das native cmd. Dann set node_env=production&& node whatever.jsfunktioniert die Verwendung wie erwartet.
Mein Anwendungsfall:
Ich entwickle unter Windows, weil mein Workflow viel schneller ist, aber ich musste sicherstellen, dass die entwicklungsspezifische Middleware meiner Anwendung nicht in der Produktionsumgebung ausgelöst wurde.
Beachten Sie, dass die Textausgabe der Serverfunktionen unterdrückt wird und ich nicht sicher bin, ob dies behoben werden kann. (Erweiterung der Antwort von @ jsalonen.)
Ihr Programm schlägt dann schnell fehl, wenn eine in "definierte" Variable .env.exampleentweder als Umgebungsvariable oder in nicht festgelegt ist .env.
.env-Dateien sind nur für Geheimnisse geeignet und erhöhen die Komplexität beim Einrichten, wenn einem Projekt neue Personen zugewiesen oder Änderungen an ihnen vorgenommen werden.
Coiso
@coiso Wo platzieren Sie ohne einen generischen, gemeinsamen Ort viele env-Variablen? Entweder in einer Skriptdatei oder in einer IDE-abhängigen Einstellung sind Sie noch stärker an bestimmte Tools gebunden. Dies macht die Integration neuer Teammitglieder meiner Meinung nach noch schwieriger.
Dominik
2
Wenn Sie das GITBASH-Terminal verwenden, funktioniert "set NODE_ENV=production"
es nicht. Geben
Sie "export" einNODE_ENV=production"
Dadurch wird keine Variable festgelegt, aber es ist in vielen Fällen nützlich. Ich werde nicht empfehlen, dies für die Produktion zu verwenden, aber es sollte in Ordnung sein, wenn Sie mit npm herumspielen.
Starten Sie den VS-Code neu, wenn NODE_ENV oder eine andere Umgebungsvariable keinen korrekten Wert liefert. Dies sollte nach dem Neustart funktionieren.
Antworten:
Aktuelle Windows-Versionen verwenden Powershell als Standard-Shell. Verwenden Sie daher:
Per @ jsalonens Antwort unten. Wenn Sie sich in CMD befinden (das nicht mehr verwaltet wird), verwenden Sie
Dies sollte an der Eingabeaufforderung ausgeführt werden, an der Sie Ihre Node.js-Anwendung ausführen möchten.
In der obigen Zeile wird die Umgebungsvariable NODE_ENV für die Eingabeaufforderung festgelegt, an der Sie den Befehl ausführen.
Um Umgebungsvariablen global so festzulegen, dass sie über die einzelne Eingabeaufforderung hinaus bestehen, finden Sie das Tool in der Systemsteuerung im System (oder indem Sie im Startmenü "Umgebung" in das Suchfeld eingeben).
quelle
set NODE_ENV=production && node app
. Konfigurieren Sie Ihre bequemerpackage.json
entsprechend :"scripts": { "start": "set NODE_ENV=production && node app" }
.echo %NODE_ENV%
, um den aktuellen Wert zu überprüfen.cross-env
ist die bessere Lösung für dieses Problem, wenn Ihr Team mit gemischten Betriebssystemen arbeitet. Die Antwort von @MoOx wäre meine Wahl als Antwort auf diese Frage.Ich habe gerade ein nettes Node.js-Paket gefunden, das viel dazu beitragen kann, Umgebungsvariablen mithilfe einer einzigartigen, plattformübergreifenden Syntax zu definieren.
https://www.npmjs.com/package/cross-env
Sie können so etwas schreiben:
Welches ist ziemlich praktisch! Keine Windows- oder Unix-spezifischen Befehle mehr!
quelle
In PowerShell:
quelle
set NODE_ENV=production
hat bei Powershell nicht für mich funktioniert, aber das hat funktioniert. Vielen Dank!$env:NODE_ENV="development"; gulp runMytask
. Beachten Sie das Semikolon dort. Die gulp-Datei kann eine bedingte Logik für process.env.NODE_ENV verwenden. Wenn Sie es nicht einstellen, ist es undefiniert.cross-env NODE_ENV=production
Option ist jedoch eine bessere Lösung, wenn npm-Befehle aus package.json ausgeführt werden, für die die Umgebung festgelegt werden muss. Es ist zu einfach, die Umgebung auf dev / prod zu setzen, nachdem die Option $ env: NODE_ENVEs wäre ideal, wenn Sie Parameter in derselben Zeile wie Ihr Aufruf zum Starten von Node.js unter Windows festlegen könnten. Schauen Sie sich Folgendes genau an und führen Sie es genau wie angegeben aus:
Sie haben zwei Möglichkeiten:
In der Befehlszeile:
oder
Der Trick, damit es unter Windows funktioniert, besteht darin, das Leerzeichen vor und nach dem "&&" zu entfernen. Konfigurieren Sie Ihre package.json-Datei mit start_windows (siehe unten) unten. Führen Sie dann "npm run start_windows" in der Befehlszeile aus.
quelle
Sie können verwenden
Dies ist wahrscheinlich der beste Weg, da es sowohl unter Windows als auch unter Unix kompatibel ist.
Aus der npm-Run-Script-Dokumentation :
quelle
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
Das--
ist obligatorisch . Ersetzen Sienode -e 'console.log(process.env.NODE_ENV)'
durch einen beliebigen Befehl.npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
und ... nichts ist passiert. Ich bin nicht sicher, ob diese Methode unter Windows funktioniert.Wenn Sie Visual Studio mit NTVS verwenden, können Sie die Umgebungsvariablen auf der Projekteigenschaftenseite festlegen:
Wie Sie sehen können, sind die Dropdown-Listen "Konfiguration" und "Plattform" deaktiviert (ich habe nicht zu genau untersucht, warum dies so ist). Wenn Sie Ihre
.njsproj
Datei jedoch wie folgt bearbeiten :Das Dropdown-Menü 'Debug / Release' steuert dann, wie die Variable festgelegt wird, bevor Node.js gestartet wird.
quelle
Ich habe ein Modul win-node-env geschrieben, mit dem Sie Ihren Befehl wie in * nix ausführen können.
Es erstellt eine
NODE_ENV.cmd
, die dieNODE_ENV
Umgebungsvariable festlegt und einen untergeordneten Prozess mit dem Rest des Befehls und seinen Argumenten erzeugt.Installieren Sie es einfach (global) und führen Sie Ihre npm-Skriptbefehle aus. Es sollte automatisch funktionieren.
quelle
Meine Erfahrung mit Node.js unter Windows 7 64-Bit in Visual Studio 2013 ist, dass Sie verwenden müssen
aus einem cmd-Fenster. UND Sie müssen Visual Studio neu starten, damit der neue Wert erkannt wird.
Die festgelegte Syntax gilt nur für die Dauer des cmd-Fensters, in dem sie festgelegt ist.
Einfacher Test in Node.js:
Bei Verwendung von set wird 'undefined' zurückgegeben, bei Verwendung von setx und Neustart von Visual Studio wird 'development' zurückgegeben.
quelle
cmd
- keine Powershell? Ugh, komm an die Fenster, bring es zusammen.Hier ist die Nicht-Befehlszeilenmethode:
Geben Sie unter Windows 7 oder 10 Umgebung in das Suchfeld des Startmenüs ein und wählen Sie Systemumgebungsvariablen bearbeiten.
Navigieren Sie alternativ zu Systemsteuerung \ System und Sicherheit \ System und klicken Sie auf Erweiterte Systemeinstellungen
Dies sollte das Dialogfeld Systemeigenschaften mit der ausgewählten Registerkarte Erweitert öffnen. Unten sehen Sie eine Schaltfläche Umgebungsvariablen. Klicke hier.
Das Dialogfeld Umgebungsvariablen wird geöffnet.
Wählen Sie unten unter Systemvariablen die Option Neu aus. Dadurch wird das Dialogfeld Neue Systemvariable geöffnet.
Geben Sie den Variablennamen und den Wert ein und klicken Sie auf OK.
Sie müssen alle cmd-Eingabeaufforderungen schließen und Ihren Server neu starten, damit die neue Variable für process.env verfügbar ist. Wenn es immer noch nicht angezeigt wird, starten Sie Ihren Computer neu.
quelle
Nur zur Klarstellung und für alle anderen, die sich die Haare ausreißen ...
Wenn Sie Git Bash unter Windows verwenden ,
set node_env=production&& node whatever.js
scheint dies nicht zu funktionieren . Verwenden Sie stattdessen das native cmd. Dannset node_env=production&& node whatever.js
funktioniert die Verwendung wie erwartet.Mein Anwendungsfall:
Ich entwickle unter Windows, weil mein Workflow viel schneller ist, aber ich musste sicherstellen, dass die entwicklungsspezifische Middleware meiner Anwendung nicht in der Produktionsumgebung ausgelöst wurde.
quelle
So führen Sie Ihre Anwendung in PowerShell aus (da dies
&&
nicht zulässig ist):Beachten Sie, dass die Textausgabe der Serverfunktionen unterdrückt wird und ich nicht sicher bin, ob dies behoben werden kann. (Erweiterung der Antwort von @ jsalonen.)
quelle
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
zuerst in Powershell-Typ
Geben Sie dann ein
Es funktioniert perfekt, wenn alle Ausgänge angezeigt werden.
quelle
Für mehrere Umgebungsvariablen ist eine
.env
Datei bequemer:Es ist einfach zu bedienen mit
dotenv-safe
:npm install --save dotenv-safe
.index.js
) und verwenden Sie es direkt mit demprocess.env
Befehl :Vergessen Sie nicht , die
.env
Datei in Ihrem VCS zu ignorieren .Ihr Programm schlägt dann schnell fehl, wenn eine in "definierte" Variable
.env.example
entweder als Umgebungsvariable oder in nicht festgelegt ist.env
.quelle
Wenn Sie das GITBASH-Terminal verwenden, funktioniert
"set NODE_ENV=production"
es nicht. Geben Sie "export" einNODE_ENV=production"
quelle
Dadurch wird keine Variable festgelegt, aber es ist in vielen Fällen nützlich. Ich werde nicht empfehlen, dies für die Produktion zu verwenden, aber es sollte in Ordnung sein, wenn Sie mit npm herumspielen.
quelle
Ich habe das npm-Skript verwendet, um eine Schluckaufgabe ohne "&&" auszuführen.
NODE_ENV = Testfälle npm run seed-db
quelle
Starten Sie den VS-Code neu, wenn NODE_ENV oder eine andere Umgebungsvariable keinen korrekten Wert liefert. Dies sollte nach dem Neustart funktionieren.
quelle