“NODE_ENV” dahili veya harici komut, çalıştırılabilir komut veya toplu iş dosyası olarak tanınmıyor


208

Bir Node.js uygulaması için bir ortam kurmaya çalışıyorum. ama bu hatayı her seferinde alıyorum.

"NODE_ENV" dahili veya harici bir komut, çalıştırılabilir komut veya toplu iş dosyası olarak tanınmıyor.

Bu ne anlama geliyor ve bu sorunu nasıl çözebilirim?

Windows'u kullanıyorum ve denedim set NODE_ENV=developmentama şansım yoktu.

Yanıtlar:


273

Hatanız böyle bir şeyi çalıştırma girişiminden geliyor gibi görünüyor (Linux'ta çalışır)

NODE_ENV=development node foo.js

Windows'daki eşdeğeri

SET NODE_ENV=development
node foo.js

aynı komut kabuğunda çalışıyor. NODE_ENV kümesinin çalışmadığını, ancak nasıl / ne zaman yürüttüğünüzü belirtmediniz.


teşekkürler Jim, ben komut satırında kullanılan ve package.json dosyasından kaldırıldı. ama ondan sonra başka birine rastladım. düğüm modülleri pencereler tarafından tam olarak desteklenmiyor gibi görünüyor. bcrypt ve gyp ile başka bir hata var.
krozero

burada bir uzman değil, bcrypt pencereler için destek gösterir, ancak openSSL gerektirir, bunun yardımcı olup olmadığından emin değilim. Değilse, senaryo biraz değiştiği için yeni bir soru göndermek isteyebilir.
Jim O'Neil

5
Bu gerçekten çalışırken, sanırım @ Susan-stack doğru bir cevap verdi - çapraz platform çözümü ve çizgiyi pencerelerde çalışmak için değiştirmemek, ancak diğer işletim sistemlerini kırmak.
justabuzz

Susan'ın cevabı iptal edildi - orijinal yanıt çapraz env modülünü önceden
Jim O'Neil

250

Bunun için bir modül yazdım: win-node-env .

Bir NODE_ENV.cmdset oluştururNODE_ENV ortam değişkeni ve yumurtlar komuta ve args geri kalanı ile bir çocuk süreç.

Sadece yükleyin (global olarak) ve npm script komutlarınızı çalıştırın, otomatik olarak çalışmasını sağlamalıdır.

npm install -g win-node-env

13
İşe yarıyor! Ve herhangi bir komutu değiştirmek zorunda değildim. İşte cevap.
Abhimanyu Pathania

3
bu en kolay aswer
mrTurkay

1
Senaryonuza nasıl özel değişkenler ekleyebilirim?
ivan-ivory

1
@ ivan-ivory İlk değişken (yani NODE_ENV) aynı kalmalıdır (aksi takdirde tamamen ayrı bir komut dosyası olmalıdır). Ve sonra özel değişkenler eklemek için gelince (yani NODE_ENV = dev SOME_VAR = val) script.argv'den daha fazla değişken ayrıştırmak için komut dosyasının mantığını değiştirmeliyim. Bunu düşünüyorum ama vaktim yok. Çekme isteği yapmaktan çekinmeyin.
laggingreflex

1
Benim için çalışmadı. Ben alıyorum:> NODE_ENV = geliştirme node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node sunucu / index.js 'node_modules' dahili veya harici bir komut, çalıştırılabilir program olarak tanınmıyor veya toplu iş dosyası.
Rod Lima

173

windows için &komut arasında da kullanın . Sevmek,

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

7
Komut çalışır, ancak değeri NODE_ENV'geliştirme' olacaktır ('t' ve '&' arasındaki beyaz boşluk aşağıdakileri NODE_ENV
içerecektir

1
tam olarak @ roroinpho21 ne diyor. şimdi .trim()daha sonra process.env.NODE_ENV == 'production'iş yapmak için değerlere ihtiyacım var . Zaten bir onelinerda bundan kaçınmak için?
Flion

İşe yaramayan insanlar, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" yanlış "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" doğru . Etrafında js dosyasını kaldırmanız gerekir ' ' .
Serhat Türkman

Bu, npm'i çalıştırmaya çalıştığınızda üretim modunu üretime ayarlamaya başlarsa tam olarak istediğinizi yapar.
Jason

90
  1. npm install "cross-env" modülü.
  2. kodu değiştir cross-env NODE_ENV=development node foo.js. Sonra benzer çalıştırabilirsiniz npm run build.

10
Lütfen cross-envbağımlılıkları dahil etmeyi unutmayınpackage.json
Aminah Nuraini

1
çapraz env en iyi cevap!
Williaan Lopes

Kütüphane burada: github.com/kentcdodds/cross-env - ve bu sayfa devDependencies içinde çapraz geliştirmeyi içerdiğini söylüyor npm install --save-dev cross-env; bu da 'env' is not recognized as an internal or external commandnpm betiği söylendiğinde hataya yardımcı olur env VARNAME=varvalue && ...(sadece env'yi kaldırın ve bunun yerine cross- env'yi ekleyin). Geliştiricilerin küresel bir şey yüklemesine veya farklı platformlar için farklı npm komut dosyalarına sahip olmasına gerek yok!
Marcus

47

Win-node-env kullanın , kullanmak için sadece aşağıdaki komutunu çalıştırın cmdveya power shellveya git bash:

npm install -g win-node-env

Ondan sonra her şey Linux gibidir.


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

NODE_ENV öğesinin sonunda bir boşluk içermesine neden olur :

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

Buradaki bir yorumda belirtildiği gibi , bunun yerine şunu kullanın:

NODE_ENV=production&& nodemon app/app.js

13

Komut dosyalarınızı Windows'u barındıracak şekilde değiştirmek kraliyet acısıdır. Uygun Windows çevirilerini anlamaya çalışmak ve 2 komut dizisini korumak, hayatınızı yaşamak için bir yol değildir.

Npm'yi Windows'ta bash kullanacak şekilde yapılandırmak çok daha kolaydır ve komut dosyalarınız olduğu gibi çalışacaktır.

Sadece koş npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Bash yürütülebilir dosyasının yolunun makineniz için doğru olduğundan emin olun. Değişikliğin etkili olması için büyük olasılıkla terminalin yeni bir örneğini başlatmanız gerekecektir.

Aşağıdaki ekran görüntüsü avantajı göstermektedir.

  1. npm ERR! başlangıçta komut dosyasını çalıştırmaya çalışırken.
  2. Windows kullanımı için değiştirilen komut dosyası çalışır, ancak dönüş iletisini göstermez.
  3. Npm config'i bash kullanmak üzere güncelledikten sonra, komut dosyası çalışır ve uygun iletiyi döndürür.

Windows'da olduğu gibi npm komut dosyalarını çalıştırmak için


7

Git Bash kullanan ve sorun yaşayanlar için npm run <script>,

Komut dosyalarını çalıştırmak için npm'yi Git Bash kullanacak şekilde ayarlayın

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (yolu kurulumunuza göre değiştirin)

Ve sonra npm Git Bash ile komut dosyaları çalıştıracaktır, bu nedenle bu gibi kullanımlar NODE_ENV=düzgün çalışacaktır.



2

Pencereler için git bash'ı açın ve deneyin

NODE_ENV=production node app.js


1
Doğrudan kullanıldığında Git Bash (nane) içinde çalışır. Ama aynı komutu çalıştırdığımda, npm <scripts_entry>farklı ifadelerle ancak eşdeğer anlamda bir hata alıyorum: env var name'i yürütülebilir olarak ele alıyor.
Andrey Mikhaylov - lolmaus

2
@ AndreyMikhaylov-lolmaus npm run <script>komutları çalıştırmak için Windows cmd'yi varsayılan olarak kullanır. Git Bash'i kullanacak şekilde ayarlayabilirsiniz. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"Ve sonra npm runkomut dosyalarını çalıştırmak için Git Bash'i kullanır.
user3790180

1

Oradaki cevapların çoğu bana yardımcı olmadı ..

Bana yardımcı olan şey NODE_ENV=production&& nodemon app/app.js

Alanı not edin. İyi şanslar.


1

Benim gibi başka biri buraya hata için bir çözüm bulmaya çalışırken geldiyse:

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

Bunu almamın nedeni, bir mac geliştirme makinesinden Windows 10 masaüstüne açısal bir çözüm taşımamdı. Ben böyle çözdüm.

  1. Çalıştırmak npm install --save-dev cross-env

  2. Benim package.json dosyasına gidip gelen tüm script referanslarını değiştirmek env <whatever>içincross-env <whatever>

Sonra komutlarım şöyle: npm run start:some_random_environment_varşimdi Windows 10'da iyi çalışıyor.


Windows kullanıcıları için Bash'e geçmek için, özellikle geri kalanı çalıştığında biraz lapa. Bu benim için işe yarayan iyi bir çözüm.
FuZZbaLL

0

process.env.NODE_ENV boşluk ekliyor bunu yap

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

0

Pencereler için bunu yapabilirsiniz

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.