2017-04-24 2 views
0

Also arbeite ich an einem Projekt mit webpack und wollte ein Skript auf meiner package.json erstellen, um sowohl den Entwickler- als auch den Produktionsmodus von dort zu starten. Ich bin ein Windows-Benutzer und verwende immer Concurrently, um mehrere Terminal-Aufgaben gleichzeitig auszuführen.Ändert die NODE_ENV-Variable nicht gleichzeitig

richte ich package.json Skripte wie folgt aus:

"scripts": { 
    "start": "concurrently \"set NODE_ENV=\" \"webpack --watch\"", 
    "build": "concurrently \"set NODE_ENV=production\" \"webpack\"" 
}, 

Der Ausgang dieses im Terminal ist:

set NODE_ENV= exited with code 0 
Webpack is watching the files… 
... 

Also im Grunde webpack ordnungsgemäß funktioniert, aber die Variable nicht sein erstellt/gelöscht Beide Befehle sind fehlgeschlagen.

Wenn ich direkt laufen

set NODE_ENV=production 

es funktioniert, so dass ich ein wenig verwirrt ...

Irgendwelche Ideen?

Vielen Dank!

+0

Welcher Befehl wird es andernfalls bauen oder starten? Außerdem könnte man argumentieren, dass Ihre Umgebungsvariablen in der Umgebung und nicht als Teil der Mutter-Skripte festgelegt werden sollten. Lesen Sie 12factor.net. – Paul

+0

Beide versagen. Danke für das Lesen, ich werde es gleich ausprobieren. – pegido

Antwort

1

Wechsel:

"start": "concurrently \"set NODE_ENV=\" \"webpack --watch\"", 
"build": "concurrently \"set NODE_ENV=production\" \"webpack\"" 

zu:

"start": "NODE_ENV= webpack --watch", 
"build": "NODE_ENV=production webpack" 

Sie können nicht die Umwelt in einem Prozess ändern und erwarten, dass es in einer anderen begann parallel geändert werden. Sie können das env von untergeordneten Prozessen nur bei deren Start ändern. Der untergeordnete Prozess erbt immer die Umgebung vom übergeordneten Objekt.

Wenn die oben nicht auf Windows funktioniert dann verwenden cross-env:

npm install --save-dev cross-env 

und in package.json Verwendung:

"start": "cross-env NODE_ENV= webpack --watch", 
"build": "cross-env NODE_ENV=production webpack" 
+0

Ich habe Knoten noch nicht unter Windows gemacht, wird diese Syntax die Umgebungsvariablen setzen? – Paul

+0

@Paul Siehe meine aktualisierte Antwort zum Einstellen der Umgebung unter Windows für den Fall, dass das erste Beispiel fehlschlägt. – rsp

+0

@rsp Nun, es sieht so aus, als ob all diese Arbeiten funktionieren ... Die erste Lösung stellt die Umgebung nicht ein, und die zweite (mit cross-env) tut überhaupt nichts - weder die env-Variable noch das runing webpack. Danke trotzdem, dass du dir Zeit genommen hast. – pegido

Verwandte Themen