it-swarm.com.de

Wie kann ich NODE_ENV = production unter Windows einstellen?

In Ubuntu ist das 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 einstellen kann?

260
Jack

Aktuelle Windows-Versionen verwenden Powershell als Standardshell. Verwenden Sie daher Folgendes:

$env:NODE_ENV="production"

Per @ jsalonens Antwort unten. Wenn Sie sich in CMD befinden (was nicht mehr gepflegt wird), verwenden Sie

set NODE_ENV=production

Dies sollte in der Eingabeaufforderung ausgeführt werden, in der Sie Ihre Node.js-Anwendung ausführen möchten.

In der obigen Zeile würde die Umgebungsvariable NODE_ENV für die Eingabeaufforderung festgelegt, in der Sie den Befehl ausführen.

Um Umgebungsvariablen global so einzustellen, dass sie über die einzige Eingabeaufforderung hinaus bestehen, können Sie das Werkzeug über System in der Systemsteuerung finden (oder indem Sie "Umgebung" in das Suchfeld im Startmenü eingeben).

385

Ich habe gerade ein Nice Node.js-Paket gefunden, das bei der Definition von Umgebungsvariablen mit einer eindeutigen, plattformübergreifenden Syntax viel helfen kann.

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

Damit können Sie so etwas schreiben:

cross-env NODE_ENV=production my-command

Welches ist ziemlich bequem! Keine Windows- oder Unix-spezifischen Befehle mehr!

159
MoOx

In PowerShell:

$env:NODE_ENV="production"
157
jsalonen

Es wäre ideal, wenn Sie in derselben Zeile Parameter wie Ihren Aufruf zum Starten von Node.js unter Windows einstellen könnten. Sehen Sie sich das Folgende genau an und führen Sie es genau wie angegeben aus:

Sie haben diese zwei Möglichkeiten:

  1. In der Kommandozeile:

    set NODE_ENV=production&&npm start
    

    oder

    set NODE_ENV=production&&node index.js
    
  2. Führen Sie "npm run start_windows" in der Befehlszeile aus, wobei Ihre package.json-Datei wie folgt konfiguriert ist

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

Unter Windows können Sie den Whitespace vor und nach dem "&&" entfernen.

68
Alexander Mills

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 ein "env" -Befehl in Ihrem Paket definiert ist, hat dies Vorrang vor dem integrierten.

27
Brieuc P

Wenn Sie Visual Studio mit NTVS verwenden, können Sie die Umgebungsvariablen auf der Projekteigenschaften-Seite festlegen:

 Visual Studio NTVS Project Properties

Wie Sie sehen, sind die Konfigurations- und Plattform-Dropdown-Listen deaktiviert (ich habe nicht allzu viel darüber nachgedacht, warum dies so ist), aber wenn Sie Ihre .njsproj-Datei 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.

13
paul

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 eingestellte 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 der Verwendung von set wird "undefined" zurückgegeben. Bei der Verwendung von setx und dem Neustart von Visual Studio wird "development" zurückgegeben.

8
edhubbell

Nur um zu klären, und für alle anderen, die ihre Haare herausziehen könnten ...

Wenn Sie git bash unter Windows verwenden, scheint set node_env=production&& node whatever.js nicht zu funktionieren . Verwenden Sie stattdessen die native cmd. Verwenden Sie dann set node_env=production&& node whatever.jsworks wie erwartet.

Mein Anwendungsfall: 

Ich entwickle unter Windows, weil mein Workflow sehr schneller ist, aber ich musste sicherstellen, dass die entwicklungsspezifische Middleware meiner Anwendung nicht in der Produktionsumgebung ausgeführt wird.

6
pstrawberriedev

Ich habe ein Modul win-node-env geschrieben, mit dem Sie Ihren Befehl so ausführen können, wie Sie es in * nix tun würden.

NODE_ENV=production node myapp/app.js

Es erstellt einen NODE_ENV.cmd, der die Umgebungsvariable NODE_ENV 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. Diese sollten dann automatisch funktionieren.

npm install -g win-node-env
5
laggingreflex

Hier ist die Methode ohne Befehlszeile:

Geben Sie in Windows 7 oder 10 umgebung in das Suchfeld des Startmenüs ein und wählen Sie Systemumgebungsvariablen bearbeiten.

Wechseln Sie alternativ zu Systemsteuerung\System und Sicherheit\System, und klicken Sie auf Erweiterte Systemeinstellungen

Daraufhin sollte das Dialogfeld Systemeigenschaften mit der Registerkarte Erweitert geöffnet werden. Am unteren Rand sehen Sie eine Schaltfläche Umgebungsvariablen. Klicke hier.

 System Dialog Box

Das Dialogfeld "Umgebungsvariablen" wird geöffnet. 

 Environment Variable Dialog Box

Wählen Sie unten unter Systemvariablen die Option Neu ... aus. Das Dialogfeld Neue Systemvariable wird geöffnet.

 enter image description here

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.

5
Mattatat-tat

So führen Sie Ihre Anwendung in PowerShell aus (da && nicht zulässig ist):

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

Beachten Sie, dass die Textausgabe des Servers unterdrückt wird und ich nicht sicher bin, ob das behoben werden kann. (Erweiterung auf @ jsalonens Antwort.)

4
Cameron Yick

zuerst im Powershell-Typ

$env:NODE_ENV="production"

dann tippen 

node fileName.js

Es funktioniert perfekt und zeigt alle Ausgänge an.

3
Abhinav

Für mehrere Umgebungsvariablen ist eine .env - Datei praktischer:

# .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 benutzen mit dotenv-safe :

  1. Installieren Sie mit npm install --save dotenv-safe.
  2. Fügen Sie es in Ihren Code ein (am besten am Anfang des index.js) Und verwenden Sie es direkt mit dem Befehl process.env :
require('dotenv').load()
console.log(process.env.DB_Host)   

Vergiss nicht ignoriere die .env - Datei in deinem VCS .

Ihr Programm schlägt dann schnell fehl, wenn eine in .env.example "Definierte" Variable entweder als Umgebungsvariable oder in .env Nicht gesetzt ist.

2
Dominik

Ich habe ein npm-Skript verwendet, um eine Schluckaufgabe ohne "&&" auszuführen.

NODE_ENV = Testfälle npm run seed-db

0
Mari Orlova

Falls Sie ein GITBASH-Terminal verwenden, funktioniert "set NODE_ENV=production" Nicht. Was Sie tun können, ist den Typ "Export NODE_ENV=production"

dies setzt keine Variable, ist aber in vielen Fällen nützlich. Ich werde es nicht für die Produktion empfehlen, aber es sollte okay sein, wenn Sie mit npm herumspielen.

npm install --production
0
Bar Horing