"NODE_ENV" wird nicht als interner oder externer Befehl, bedienbarer Befehl oder Batchdatei erkannt

207

Ich versuche, eine Umgebung für eine Node.js-App einzurichten. Aber ich bekomme jedes Mal diesen Fehler.

"NODE_ENV" wird nicht als interner oder externer Befehl, bedienbarer Befehl oder Batchdatei erkannt.

Was bedeutet das und wie kann ich dieses Problem lösen?

Ich benutze Windows und habe es auch versucht set NODE_ENV=development, hatte aber kein Glück.

Krozero
quelle

Antworten:

270

Es hört sich so an, als ob Ihr Fehler von einem Versuch herrührt, so etwas auszuführen (was unter Linux funktioniert).

NODE_ENV=development node foo.js

das Äquivalent in Windows wäre

SET NODE_ENV=development
node foo.js

läuft in der gleichen Befehlsshell. Sie haben erwähnt, dass set NODE_ENV nicht funktioniert hat, aber nicht klar war, wie / wann Sie es ausgeführt haben.

Jim O'Neil
quelle
danke Jim, ich habe es in der Kommandozeile verwendet und aus der Datei package.json entfernt. aber danach traf ich einen anderen. Es sieht so aus, als würden Knotenmodule von Windows nicht vollständig unterstützt. habe einen weiteren Fehler mit bcrypt und gyp.
Krozero
kein Experte hier, aber bcrypt zeigt Unterstützung für Windows, erfordert aber openSSL, nicht sicher, ob das hilft. Wenn nicht, möchten Sie möglicherweise eine neue Frage stellen, da sich das Szenario etwas geändert hat.
Jim O'Neil
5
Während dies tatsächlich funktioniert, hat @ Susan-stack meiner Meinung nach die richtige Antwort gegeben - eine plattformübergreifende Lösung, bei der die Leitung nicht so geändert wird, dass sie unter Windows funktioniert, sondern andere Betriebssysteme beschädigt werden.
Justabuzz
Susans Antwort - die ursprüngliche Antwort war älter als das Cross-Env-Modul
Jim O'Neil
250

Ich habe ein Modul dafür geschrieben: win-node-env .

Es wird eine erstellt 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.

npm install -g win-node-env
Laggingreflex
quelle
13
Es klappt! Und ich musste keine Befehle ändern. Das ist die Antwort.
Abhimanyu Pathania
3
Dies ist die einfachste Antwort
mrTurkay
1
Wie kann ich Ihrem Skript benutzerdefinierte Variablen hinzufügen?
Iwan-Elfenbein
1
@ ivan-ivory Die erste Variable (dh NODE_ENV) muss gleich bleiben (andernfalls muss es sich um ein völlig separates Skript handeln). Und was das Hinzufügen von benutzerdefinierten Variablen danach betrifft (dh NODE_ENV = dev SOME_VAR = val), muss ich die Logik des Skripts ändern, um weitere Variablen aus process.argv zu analysieren. Ich habe darüber nachgedacht, habe aber keine Zeit. Fühlen Sie sich frei, eine Pull-Anfrage zu stellen.
Laggingreflex
1
Hat bei mir nicht funktioniert. Ich erhalte:> NODE_ENV = Entwicklung node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' wird nicht als internes oder externes Befehlsprogramm erkannt oder Batch-Datei.
Rod Lima
173

für Windows auch &Zwischenbefehl verwenden. Mögen,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }
Mahmudul Hasan
quelle
7
Der Befehl funktioniert, aber der Wert von NODE_ENVwird 'Entwicklung' sein (der Leerraum zwischen 't' und '&' wird von enthalten sein NODE_ENV)
roroinpho21
1
genau das, was @ roroinpho21 sagt. Jetzt muss ich .trim()den Wert später zum process.env.NODE_ENV == 'production'Arbeiten bringen. Wie auch immer, um dies in einem Oneliner zu vermeiden?
Flion
Leute, die es nicht zum Laufen bringen konnten, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" falsch "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" wahr . Sie müssen die ' ' um die js-Datei herum entfernen.
Serhat Türkman
Dies macht genau das, was Sie wollen, wenn Sie versuchen, npm start auszuführen, um den Produktionsmodus auf Produktion zu setzen.
Jason
90
  1. npm install "cross-env" Modul.
  2. Ändern Sie den Code als cross-env NODE_ENV=development node foo.js. Dann können Sie dergleichen ausführen npm run build.
Susan-Stapel
quelle
10
Bitte vergessen Sie nicht cross-env, die Abhängigkeiten inpackage.json
Aminah Nuraini
1
cross-env beste Antwort!
Williaan Lopes
Die Bibliothek befindet sich hier: github.com/kentcdodds/cross-env - und auf dieser Seite wird angegeben, dass Cross-Dev in devDependencies enthalten sein soll npm install --save-dev cross-env. Dies hilft auch bei dem Fehler, 'env' is not recognized as an internal or external commandwenn das npm-Skript sagt env VARNAME=varvalue && ...(entfernen Sie einfach env und fügen Sie stattdessen cross-env ein). Entwickler müssen nichts global installieren oder unterschiedliche npm-Skripte für unterschiedliche Plattformen haben!
Marcus
47

Verwenden Sie win-node-env . Um es zu verwenden, führen Sie einfach den folgenden Befehl auf Ihrem cmdoder power shelloder aus git bash:

npm install -g win-node-env

Danach ist alles wie unter Linux.

AmerllicA
quelle
2
Ich mag diesen Ansatz besser, da es vermieden wird, Code zu ändern, damit er unter Windows funktioniert
Mickey Puri
1
Ja. Ich denke, das ist die am besten geeignete Antwort. Ich mag diesen Ansatz.
Sunny Sultan
Lieber @ JeffreyNicholsonCarré, danke für deinen lieben Kommentar, hoffe es hilft dir Amer
AmerllicA
26
set NODE_ENV=production & nodemon app/app.js

bewirkt, dass NODE_ENV am Ende ein Leerzeichen enthält :

process.env.NODE_ENV == 'production'; //false
process.env.NODE_ENV == 'production '; //true

Verwenden Sie stattdessen, wie in einem Kommentar hier erwähnt , Folgendes:

NODE_ENV=production&& nodemon app/app.js
Flion
quelle
Was ist mit NODE_ENV="production"?
TheFrost
Ich erinnere mich nicht, aber um die Frage nicht unbeantwortet zu lassen: Ich sehe, dass ich die Antwort von Susan-stack positiv bewertet habe. Es tut mir wirklich leid.
TheFrost
Ich habe in der Webpack-Konfiguration ein trim () hinzugefügt: `plugins: [new webpack.DefinePlugin ({" process.env ": {NODE_ENV: JSON.stringify (process.env.NODE_ENV.trim ())}})],`
Lee Comstock
Was ist der Unterschied zwischen einem Einzel- &und einem Doppelzimmer &&? Beide scheinen für mich zu arbeiten.
Programmierer
13

Das Ändern Ihrer Skripte an Windows ist ein königlicher Schmerz. Der Versuch, die geeigneten Windows-Übersetzungen herauszufinden und zwei Skriptsätze zu verwalten, ist keine Möglichkeit, Ihr Leben zu leben.

Es ist viel einfacher, npm für die Verwendung von bash unter Windows zu konfigurieren, und Ihre Skripte werden unverändert ausgeführt.

Einfach laufen npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Stellen Sie sicher, dass der Pfad zur ausführbaren Bash-Datei für Ihren Computer korrekt ist.Sie müssen wahrscheinlich eine neue Instanz des Terminals starten, damit die Änderung wirksam wird.

Der folgende Screenshot zeigt den Vorteil.

  1. npm ERR! beim ersten Versuch, ein Skript auszuführen.
  2. Das für Windows geänderte Skript wird ausgeführt, zeigt jedoch nicht die Rückmeldung an.
  3. Nach dem Aktualisieren der npm-Konfiguration zur Verwendung von bash wird das Skript ausgeführt und gibt die entsprechende Nachricht zurück.

Npm-Skripte so ausführen, wie sie in Windows ausgeführt werden

Jon Crowell
quelle
7

Für diejenigen, die Git Bash verwenden und Probleme mit haben npm run <script>,

Stellen Sie einfach npm ein, um Git Bash zum Ausführen von Skripten zu verwenden

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (Ändern Sie den Pfad entsprechend Ihrer Installation)

Und dann führt npm Skripte mit Git Bash aus, so dass solche Verwendungen wie NODE_ENV=richtig funktionieren.

user3790180
quelle
4
npm install -S cross-env

Hat für mich gearbeitet

Bang Andre
quelle
1

Die meisten Antworten dort oben haben mir nicht geholfen.

Was mir geholfen hat war NODE_ENV=production&& nodemon app/app.js

Beachten Sie den Platz. Viel Glück.

SirPhemmiey
quelle
1

Für Windows öffnen Sie Git Bash und versuchen Sie es

NODE_ENV=production node app.js

Nikhil Arya
quelle
1
Es funktioniert in Git Bash (mintty), wenn es direkt verwendet wird. Wenn ich jedoch denselben Befehl ausführe npm <scripts_entry>, wird ein Fehler mit unterschiedlicher Phrasierung, aber gleichwertiger Bedeutung angezeigt: Der Name env var wird als ausführbare Datei behandelt.
Andrey Mikhaylov - lolmaus
2
@ AndreyMikhaylov-lolmaus npm run <script>verwendet standardmäßig Windows cmd , um Befehle auszuführen. Sie können festlegen, dass Git Bash verwendet wird. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"Und dann npm runwird Git Bash verwendet, um Skripte auszuführen.
user3790180
1

Wenn jemand wie ich hierher gekommen ist, um eine Lösung für den Fehler zu finden:

'env' is not recognized as an internal or external command

Der Grund dafür ist, dass ich eine eckige Lösung von einem Mac-Entwicklungscomputer auf einen Windows 10-Desktop migriert habe. So habe ich es gelöst.

  1. Lauf npm install --save-dev cross-env

  2. Gehen Sie in meine Datei package.json und ändern Sie alle Skriptreferenzen von env <whatever>incross-env <whatever>

Dann mögen meine Befehle: npm run start:some_random_environment_varJetzt laufen sie gut unter Windows 10.

Helzgate
quelle
Für Windows-Benutzer ist es ein bisschen matschig, einfach zu Bash zu wechseln, besonders wenn der Rest einfach funktioniert. Dies ist eine gute Lösung, die für mich funktioniert hat.
FuZZbaLL
0

process.env.NODE_ENV fügt ein weißer Raum dies tun

process.env.NODE_ENV.trim() == 'production'
Hamza Abbasi
quelle
0

Für Windows kann man es so machen

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Husain Dhariwala
quelle