In Ubuntu ist es ganz einfach; Ich kann die Anwendung ausführen mit:
$ NODE_ENV=production node myapp/app.js
Dies funktioniert jedoch nicht unter Windows. Gibt es eine Konfigurationsdatei, in der ich das Attribut festlegen kann?
In Ubuntu ist es ganz einfach; Ich kann die Anwendung ausführen mit:
$ NODE_ENV=production node myapp/app.js
Dies funktioniert jedoch nicht unter Windows. Gibt es eine Konfigurationsdatei, in der ich das Attribut festlegen kann?
Antworten:
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).
set NODE_ENV=production && node app
. Konfigurieren Sie Ihre bequemer package.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:
cross-env NODE_ENV=production my-command
Welches ist ziemlich praktisch! Keine Windows- oder Unix-spezifischen Befehle mehr!
In PowerShell:
$env:NODE_ENV="production"
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_ENV
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.
//package.json
"scripts": {
"start": "node index.js"
"start_windows": "set NODE_ENV=production&&node index.js"
}
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.
Aus der npm-Run-Script-Dokumentation :
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.
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.
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 :
<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>
Das Dropdown-Menü 'Debug / Release' steuert dann, wie die Variable festgelegt wird, bevor Node.js gestartet wird.
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_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.
npm install -g win-node-env
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.
Einfacher Test in Node.js:
console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);
Bei Verwendung von set wird 'undefined' zurückgegeben, bei Verwendung von setx und Neustart von Visual Studio wird 'development' zurückgegeben.
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.
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. Dann set 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.
So führen Sie Ihre Anwendung in PowerShell aus (da dies &&
nicht zulässig ist):
($env:NODE_ENV="production") -and (node myapp/app.js)
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.)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Für mehrere Umgebungsvariablen ist eine .env
Datei bequemer:
# .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
Es ist einfach zu bedienen mit dotenv-safe
:
npm install --save dotenv-safe
.index.js
) und verwenden Sie es direkt mit dem process.env
Befehl :require('dotenv').load()
console.log(process.env.DB_HOST)
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
.
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.
npm install --production
Ich habe das npm-Skript verwendet, um eine Schluckaufgabe ohne "&&" auszuführen.
NODE_ENV = Testfälle npm run seed-db
Starten Sie den VS-Code neu, wenn NODE_ENV oder eine andere Umgebungsvariable keinen korrekten Wert liefert. Dies sollte nach dem Neustart funktionieren.