„NODE_ENV” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, polecenie operacyjne lub plik wsadowy


208

Próbuję skonfigurować środowisko dla aplikacji Node.js. ale za każdym razem otrzymuję ten błąd.

„NODE_ENV” nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, polecenie operacyjne lub plik wsadowy.

Co to znaczy i jak mogę rozwiązać ten problem?

Korzystam z systemu Windows i również próbowałem, set NODE_ENV=developmentale nie miałem szczęścia.

Odpowiedzi:


272

Wygląda na to, że Twój błąd pochodzi z próby uruchomienia czegoś takiego (działa w systemie Linux)

NODE_ENV=development node foo.js

odpowiednikiem w systemie Windows byłoby

SET NODE_ENV=development
node foo.js

działający w tej samej powłoce poleceń. Wspomniałeś, że zestaw NODE_ENV nie działa, ale nie było jasne, jak / kiedy go wykonałeś.


dzięki Jim, użyłem go w wierszu poleceń i usunąłem z pliku package.json. ale potem wpadłem na inną. wygląda na to, że moduły węzłów nie są w pełni obsługiwane przez Windows. dostał kolejny błąd z bcrypt i gyp.
krozero

nie jest tutaj ekspertem, ale bcrypt pokazuje obsługę Windows, ale wymaga openSSL, nie jestem pewien, czy to pomoże. Jeśli nie, może chcieć opublikować nowe pytanie, ponieważ scenariusz nieco się zmienił.
Jim O'Neil,

5
Chociaż to rzeczywiście działa, myślę, że @ Susan-stack podał prawidłową odpowiedź - rozwiązanie wieloplatformowe i nie zmieniające linii do pracy w systemie Windows, ale psujące inny system operacyjny.
justabuzz

głosowała pozytywnie na odpowiedź Susan - oryginalna odpowiedź poprzedza moduł cross-env
Jim O'Neil

250

Napisałem do tego moduł: win-node-env .

Tworzy NODE_ENV.cmdto ustawia NODE_ENVzmienną środowiskową i spawns procesu dziecko z resztą polecenia i jego argumentami.

Wystarczy zainstalować (globalnie) i uruchomić polecenia skryptu npm, powinno to automatycznie sprawić, by działały.

npm install -g win-node-env

13
To działa! I nie musiałem zmieniać żadnych poleceń. Oto odpowiedź.
Abhimanyu Pathania

3
jest to najłatwiejsza odpowiedź
mrTurkay

1
Jak mogę dodać niestandardowe zmienne do skryptu?
ivan-ivory

1
@ ivan-ivory Pierwsza zmienna (tj. NODE_ENV) musi pozostać niezmieniona (w przeciwnym razie będzie to zupełnie osobny skrypt). A jeśli chodzi o dodawanie zmiennych niestandardowych po nim (tj. NODE_ENV = dev SOME_VAR = val) Będę musiał zmodyfikować logikę skryptu, aby przeanalizować więcej zmiennych z procesu.argv. Myślałem o tym, ale nie mam czasu. Złóż wniosek o pociągnięcie.
laggingreflex

1
Nie działało dla mnie. Dostaję:> NODE_ENV = programowanie moduły_węzła / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, program operacyjny lub plik wsadowy.
Rod Lima,

173

dla systemu Windows użyj &również polecenia między. Lubić,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }

7
Polecenie działa, ale wartością NODE_ENVbędzie „rozwój” (biała spacja między „t” a „&” zostanie zawarta przez NODE_ENV)
roroinpho21

1
dokładnie to, co mówi @ roroinpho21. teraz muszę .trim()docenić później, aby móc process.env.NODE_ENV == 'production'pracować. W każdym razie, aby tego uniknąć w oneliner?
Flion

Ludzie, którzy nie mogli sprawić, by działał, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" źle "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" prawda . Musisz usunąć cały ' ' plik js.
Serhat Türkman

Robi to dokładnie to, co chcesz, jeśli próbujesz uruchomić npm, aby ustawić tryb produkcyjny na produkcyjny.
Jason

90
  1. npm install "cross-env" moduł.
  2. zmodyfikuj kod jako cross-env NODE_ENV=development node foo.js. Następnie możesz uruchomić podobnie npm run build.

10
Proszę nie zapomnieć o uwzględnieniu cross-envzależności wpackage.json
Aminah Nuraini

1
cross-env najlepsza odpowiedź!
Williaan Lopes,

Biblioteka jest tutaj: github.com/kentcdodds/cross-env - i ta strona mówi, że zawiera cross-dev w devDependencies npm install --save-dev cross-env; pomaga to również w błędzie, 'env' is not recognized as an internal or external commandgdy powiedział skrypt npm env VARNAME=varvalue && ...(wystarczy usunąć env i zamiast tego wstawić cross-env). Nie ma potrzeby, aby programiści instalowali coś globalnie lub mieli różne skrypty npm dla różnych platform!
Marcus

47

Zastosowanie wygrać-node-env , za korzystanie z niego po prostu uruchomić poniżej komendy na własną cmdlub power shelllub git bash:

npm install -g win-node-env

Po tym wszystko jest jak Linux.


2
bardziej podoba mi się to podejście, ponieważ unika się konieczności zmiany kodu, aby działał w systemie Windows
Mickey Puri

1
tak. Myślę, że to jest najbardziej odpowiednia odpowiedź. Lubię to podejście.
Sunny Sultan

Drogi @ JeffreyNicholsonCarré, dziękuję za piękny komentarz, mam nadzieję, że ci pomoże ❤️🌹
AmerllicA

27
set NODE_ENV=production & nodemon app/app.js

spowoduje, że NODE_ENV będzie zawierał spację na końcu:

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

Jak wspomniano w komentarzu tutaj , użyj tego zamiast:

NODE_ENV=production&& nodemon app/app.js

Co NODE_ENV="production"?
TheFrost,

Nie pamiętam, ale nie pozostawiając pytania bez odpowiedzi: widzę, że głosowałem za odpowiedzią udzieloną przez Susan-stack. Bardzo przepraszam.
TheFrost,

Dodałem trim () w konfiguracji webpack: `plugins: [new webpack.DefinePlugin ({" process.env ": {NODE_ENV: JSON.stringify (process.env.NODE_ENV.trim ())}})],`
Lee Comstock,

Jaka jest różnica między pojedynczym &a podwójnym &&? Oba wydają się działać dla mnie.
theprogrammer

13

Zmiana skryptów w celu dostosowania do systemu Windows to królewski ból. Próba znalezienia odpowiednich tłumaczeń dla systemu Windows i utrzymywania 2 zestawów skryptów nie jest sposobem na życie.

O wiele łatwiej jest skonfigurować npm do korzystania z basha w systemie Windows, a twoje skrypty będą działać tak, jak są.

Po prostu biegnij npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Upewnij się, że ścieżka do pliku wykonywalnego bash jest poprawna dla twojego komputera. Prawdopodobnie konieczne będzie uruchomienie nowej instancji terminala, aby zmiana zaczęła obowiązywać.

Poniższy zrzut ekranu ilustruje korzyści.

  1. npm ERR! podczas próby uruchomienia skryptu na początku.
  2. Skrypt zmodyfikowany dla systemu Windows działa, ale nie wyświetla komunikatu zwrotnego.
  3. Po zaktualizowaniu konfiguracji npm do używania bash, skrypt uruchamia się i zwraca odpowiedni komunikat.

Uruchamianie skryptów npm tak, jak działa w systemie Windows


7

Dla tych, którzy używają Git Bash i mają problemy z npm run <script>,

Wystarczy ustawić npm, aby używał Git Bash do uruchamiania skryptów

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (zmień ścieżkę zgodnie z instalacją)

I wtedy npm uruchomi skrypty z Git Bash, więc takie zastosowania NODE_ENV=będą działać poprawnie.



2

W systemie Windows otwórz git bash i spróbuj

NODE_ENV=production node app.js


1
Działa bezpośrednio w Git Bash (miętowy). Ale kiedy uruchamiam to samo polecenie npm <scripts_entry>, pojawia się błąd o innym sformułowaniu, ale o równoważnym znaczeniu: traktuje nazwę zmiennej env jako plik wykonywalny.
Andrey Mikhaylov - lolmaus

2
@ AndreyMikhaylov-lolmaus domyślnie npm run <script>używa Windows cmd do uruchamiania poleceń. Możesz ustawić używanie Git Bash. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"A następnie npm runużyje Git Bash do uruchamiania skryptów.
user3790180,

1

Większość odpowiedzi tam nie pomogła mi ...

Pomogło mi to NODE_ENV=production&& nodemon app/app.js

Zwróć uwagę na miejsce. Powodzenia.


1

Jeśli ktoś inny przyszedł tu jak ja, próbując znaleźć rozwiązanie błędu:

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

Powodem tego jest to, że migrowałem rozwiązanie kątowe z komputera programistycznego Mac na pulpit systemu Windows 10. Tak to rozwiązałem.

  1. biegać npm install --save-dev cross-env

  2. przejdź do mojego pliku package.json i zmień wszystkie odwołania env <whatever>do skryptu z nacross-env <whatever>

Następnie moje polecenia, takie jak: npm run start:some_random_environment_varteraz działają dobrze w systemie Windows 10.


Użytkownicy systemu Windows po prostu przełączają się na Bash, co jest nieco papką, zwłaszcza gdy reszta po prostu działa. To dobre rozwiązanie, które działało dla mnie.
FuZZbaLL

0

process.env.NODE_ENV dodaje białą spację, zrób to

process.env.NODE_ENV.trim() == 'production'

0

W przypadku systemu Windows możesz to zrobić w podobny sposób

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.