"NODE_ENV" tidak dikenali sebagai perintah internal atau eksternal, perintah yang dapat dijalankan atau file batch

208

Saya mencoba menyiapkan lingkungan untuk aplikasi Node.js. tapi saya mendapatkan kesalahan ini setiap waktu.

"NODE_ENV" tidak dikenali sebagai perintah internal atau eksternal, perintah yang dapat dijalankan atau file batch.

Apa artinya ini dan bagaimana saya bisa menyelesaikan masalah ini?

Saya menggunakan Windows dan juga mencoba set NODE_ENV=developmenttetapi tidak berhasil.

krozero
sumber

Jawaban:

273

Sepertinya kesalahan Anda berasal dari upaya menjalankan sesuatu seperti ini (yang berfungsi di Linux)

NODE_ENV=development node foo.js

akan sama dengan Windows

SET NODE_ENV=development
node foo.js

berjalan di shell perintah yang sama. Anda menyebutkan bahwa set NODE_ENV tidak berfungsi, tetapi tidak jelas bagaimana / kapan Anda menjalankannya.

Jim O'Neil
sumber
terima kasih Jim, saya menggunakannya di command line dan dihapus dari file package.json. tetapi saya bertemu dengan yang lain setelah itu. Sepertinya modul simpul tidak sepenuhnya didukung oleh windows. mendapat kesalahan lain dengan bcrypt dan gyp.
krozero
bukan ahli di sini, tetapi bcrypt menunjukkan dukungan untuk windows, tetapi memang membutuhkan openSSL, tidak yakin apakah itu membantu. Jika tidak, mungkin ingin memposting pertanyaan baru karena skenario telah sedikit berubah.
Jim O'Neil
5
Meskipun ini memang bekerja, saya pikir @ Susan-stack memberikan jawaban yang benar - solusi lintas platform dan tidak mengubah jalur untuk bekerja di windows tetapi merusak OS lainnya.
justabuzz
dijawab terbalik Susan - tanggapan asli mendahului modul cross-env
Jim O'Neil
251

Saya menulis modul untuk ini: win-node-env .

Itu menciptakan NODE_ENV.cmdyang menetapkan NODE_ENVvariabel lingkungan dan menumbuhkan proses anak dengan sisa perintah dan argumennya.

Cukup instal (secara global), dan jalankan perintah skrip npm Anda, itu akan membuatnya otomatis berfungsi.

npm install -g win-node-env
laggingreflex
sumber
13
Berhasil! Dan saya tidak perlu mengubah perintah apa pun. Ini jawabannya.
Abhimanyu Pathania
3
ini adalah cara termudah
mrTurkay
1
Bagaimana saya bisa menambahkan variabel khusus ke skrip Anda?
ivan-gading
1
@ ivan-ivory Variabel pertama (yaitu NODE_ENV) harus tetap sama (jika tidak harus menjadi skrip yang sepenuhnya terpisah). Dan untuk menambahkan variabel khusus setelahnya (yaitu NODE_ENV = dev SOME_VAR = val) Saya harus memodifikasi logika skrip untuk mem-parsing lebih banyak variabel dari process.argv. Saya sudah memikirkannya tetapi tidak punya waktu. Jangan ragu untuk melakukan permintaan tarik.
laggingreflex
1
Tidak bekerja untuk saya. Saya mendapatkan:> NODE_ENV = pengembangan node_modules / .bin / nodemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan atau file batch.
Rod Lima
173

untuk windows digunakan &di antara perintah juga. Suka,

  "scripts": {
    "start": "SET NODE_ENV=development & nodemon app/app.js",
  }
Mahmudul Hasan
sumber
7
Perintah berfungsi tetapi nilai NODE_ENVakan menjadi 'pengembangan' (ruang putih antara 't' dan '&' akan dimuat oleh NODE_ENV)
roroinpho21
1
persis apa yang dikatakan @ roroinpho21. sekarang saya harus .trim()nilai nanti untuk membuat process.env.NODE_ENV == 'production'pekerjaan. Pokoknya untuk menghindari ini di oneliner?
Flion
Orang yang tidak bisa membuatnya bekerja, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" salah "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" benar . Anda perlu menghapus ' ' sekitar file js.
Serhat Türkman
Ini melakukan apa yang Anda inginkan jika Anda mencoba menjalankan npm mulai mengatur mode produksi ke produksi.
Jason
90
  1. npm install "cross-env" modul.
  2. ubah kode sebagai cross-env NODE_ENV=development node foo.js. Maka Anda dapat menjalankan sejenisnya npm run build.
Susan-stack
sumber
10
Tolong jangan lupa untuk menyertakan cross-envdependensi dipackage.json
Aminah Nuraini
1
cross-env jawaban terbaik!
Williaan Lopes
Pustaka ada di sini: github.com/kentcdodds/cross-env - dan halaman itu mengatakan untuk menyertakan cross-dev di devDependencies npm install --save-dev cross-env; ini juga membantu dengan kesalahan 'env' is not recognized as an internal or external commandketika skrip npm mengatakan env VARNAME=varvalue && ...(hapus saja env dan masukkan cross-env sebagai gantinya). Tidak perlu bagi pengembang untuk menginstal sesuatu secara global atau memiliki skrip npm yang berbeda untuk platform yang berbeda!
Marcus
47

Gunakan menang-simpul-env , Untuk menggunakannya hanya menjalankan perintah di bawah ini pada Anda cmdatau power shellatau git bash:

npm install -g win-node-env

Setelah itu semuanya seperti Linux.

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

akan menyebabkan NODE_ENV berisi ruang di bagian akhir:

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

Seperti disebutkan dalam komentar di sini , gunakan ini sebagai gantinya:

NODE_ENV=production&& nodemon app/app.js
Flion
sumber
13

Mengubah skrip Anda untuk mengakomodasi Windows adalah masalah besar. Mencoba mencari terjemahan Windows yang sesuai dan memelihara 2 set skrip bukanlah cara untuk menjalani hidup Anda.

Jauh lebih mudah untuk mengkonfigurasi npm untuk menggunakan bash pada Windows dan skrip Anda akan berjalan seperti apa adanya.

Cukup jalankan npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Pastikan path ke bash executable sudah benar untuk mesin Anda. Anda mungkin harus memulai instance terminal baru agar perubahan diterapkan.

Tangkapan layar di bawah menggambarkan manfaatnya.

  1. npm ERR! saat mencoba menjalankan skrip pada awalnya.
  2. Skrip dimodifikasi untuk penggunaan Windows berjalan tetapi tidak menunjukkan pesan kembali.
  3. Setelah memperbarui npm config untuk menggunakan bash, skrip berjalan dan mengembalikan pesan yang sesuai.

Menjalankan skrip npm seperti halnya di Windows

Jon Crowell
sumber
7

Bagi mereka yang menggunakan Git Bash dan memiliki masalah dengan npm run <script>,

Cukup atur npm untuk menggunakan Git Bash untuk menjalankan skrip

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (ubah jalur sesuai dengan instalasi Anda)

Dan kemudian npm akan menjalankan skrip dengan Git Bash, sehingga penggunaan seperti itu NODE_ENV=akan berfungsi dengan baik.

pengguna3790180
sumber
4
npm install -S cross-env

Bekerja untukku

Bang Andre
sumber
2

Untuk windows buka git bash dan coba

NODE_ENV=production node app.js

Nikhil Arya
sumber
1
Itu bekerja di Git Bash (mintty) ketika digunakan secara langsung. Tetapi ketika saya menjalankan perintah yang sama dari npm <scripts_entry>, saya mendapatkan kesalahan dengan frase yang berbeda tetapi artinya setara: itu memperlakukan env var nama sebagai executable.
Andrey Mikhaylov - lolmaus
2
@ AndreyMikhaylov-lolmaus npm run <script>menggunakan Windows cmd sebagai default untuk menjalankan perintah. Anda dapat mengaturnya untuk menggunakan Git Bash. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"Dan kemudian npm runakan menggunakan Git Bash untuk menjalankan skrip.
user3790180
1

Sebagian besar jawaban di sana tidak membantu saya ..

Yang membantu saya adalah NODE_ENV=production&& nodemon app/app.js

Perhatikan ruangnya. Semoga berhasil.

SirPhemmiey
sumber
1

Jika ada orang lain datang ke sini seperti saya mencoba mencari solusi untuk kesalahan:

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

Alasan saya mendapatkan ini adalah karena saya memigrasikan solusi sudut dari mesin pengembangan mac ke desktop windows 10. Beginilah cara saya mengatasinya.

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

  2. masuk ke file package.json saya dan ubah semua referensi skrip dari env <whatever>menjadicross-env <whatever>

Kemudian perintah saya seperti: npm run start:some_random_environment_varsekarang berjalan dengan baik di Windows 10.

Helzgate
sumber
Untuk pengguna Windows hanya beralih ke Bash agak bubur, terutama ketika sisanya hanya berfungsi. Ini adalah solusi bagus yang bekerja untuk saya.
FuZZbaLL
0

process.env.NODE_ENV menambahkan spasi putih lakukan ini

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

Untuk windows Anda bisa melakukannya seperti

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