NODE_ENV không được công nhận là một lệnh nội bộ hoặc bên ngoài, lệnh có thể hoạt động hoặc tệp bó


207

Tôi đang cố gắng thiết lập môi trường cho ứng dụng Node.js. nhưng tôi luôn gặp lỗi này

"NODE_ENV" không được nhận dạng dưới dạng lệnh nội bộ hoặc bên ngoài, lệnh có thể thao tác hoặc tệp bó.

Điều này có nghĩa là gì và làm thế nào tôi có thể giải quyết vấn đề này?

Tôi đang sử dụng Windows và cũng đã thử set NODE_ENV=developmentnhưng không có may mắn.

Câu trả lời:


270

Có vẻ như lỗi của bạn xuất phát từ nỗ lực chạy một cái gì đó như thế này (hoạt động trong Linux)

NODE_ENV=development node foo.js

tương đương trong Windows sẽ là

SET NODE_ENV=development
node foo.js

chạy trong cùng một vỏ lệnh. Bạn đã đề cập đến bộ NODE_ENV không hoạt động, nhưng không rõ cách thức / thời điểm bạn thực hiện nó.


cảm ơn Jim, tôi đã sử dụng nó trong dòng lệnh và xóa khỏi tệp pack.json. Nhưng sau đó tôi đã chạy vào một cái khác. có vẻ như các mô-đun nút không được hỗ trợ đầy đủ bởi các cửa sổ. có một lỗi khác với bcrypt và gyp.
krozero

không phải là một chuyên gia ở đây, nhưng bcrypt cho thấy hỗ trợ cho các cửa sổ, nhưng không yêu cầu openSSL, không chắc điều đó có giúp ích gì không. Nếu không, có thể muốn gửi một câu hỏi mới vì kịch bản đã thay đổi một chút.
Jim O'Nilil

5
Trong khi điều này thực sự hiệu quả, tôi nghĩ @ Susan-stack đã đưa ra câu trả lời chính xác - một giải pháp đa nền tảng và không thay đổi dòng để hoạt động trên windows nhưng phá vỡ hệ điều hành khác.
justabuzz

nâng cao câu trả lời của Susan - phản hồi ban đầu có trước mô-đun chéo
Jim O'Neil

250

Tôi đã viết một mô-đun cho việc này: win-node-env .

Nó tạo ra một NODE_ENV.cmdbiến đặt NODE_ENVmôi trường và sinh ra một tiến trình con với phần còn lại của lệnh và các đối số của nó.

Chỉ cần cài đặt nó (trên toàn cầu) và chạy các lệnh script npm của bạn, nó sẽ tự động làm cho chúng hoạt động.

npm install -g win-node-env

13
Nó hoạt động! Và tôi đã không phải thay đổi bất kỳ lệnh nào. Đây là câu trả lời.
Abhimanyu Pathania

3
đây là aswer dễ nhất
mrTurkay

1
Làm thế nào tôi có thể thêm các biến tùy chỉnh cho tập lệnh của bạn?
ivan-ivory

1
@ ivan-ivory Biến đầu tiên (ví dụ NODE_ENV) phải giữ nguyên (nếu không nó sẽ phải là một tập lệnh hoàn toàn riêng biệt). Và như để thêm các biến tùy chỉnh sau nó (tức là NODE_ENV = dev SOME_VAR = val) tôi sẽ phải sửa đổi logic của tập lệnh để phân tích thêm các biến từ process.argv. Tôi đã suy nghĩ về nó nhưng không có thời gian. Hãy làm cho một yêu cầu kéo.
laggingreflex

1
Không làm việc cho tôi. Tôi đang nhận được:> NODE_ENV = Development node_modules / .bin / gậtemon --ignore ./public/tones/ --exec babel-node server / index.js 'node_modules' không được nhận dạng như một lệnh bên trong hoặc bên ngoài, chương trình có thể hoạt động hoặc tập tin lô.
Rod Lima

173

cho các cửa sổ sử dụng &ở giữa lệnh cũng. Giống,

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

7
Lệnh hoạt động nhưng giá trị của NODE_ENVsẽ là 'phát triển' (khoảng trắng giữa 't' và '&' sẽ được chứa bởi NODE_ENV)
roroinpho21

1
chính xác những gì @ roroinpho21 nói. bây giờ tôi phải có .trim()giá trị sau này để làm process.env.NODE_ENV == 'production'việc. Dù sao để tránh điều này trong một oneliner?
Flion

Những người không thể làm cho nó hoạt động, "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" sai "test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" sự thật . Bạn cần loại bỏ ' ' xung quanh tập tin js.
Serhat Türkman

Điều này thực hiện chính xác những gì bạn muốn nếu bạn đang cố chạy npm bắt đầu để đặt chế độ sản xuất thành sản xuất.
Jason

90
  1. npm install "cross-env" mô-đun.
  2. sửa đổi mã như cross-env NODE_ENV=development node foo.js. Sau đó, bạn có thể chạy như thế npm run build.

10
Xin đừng quên bao gồm cross-envcác phụ thuộc trongpackage.json
Aminah Nuraini

1
cross-env câu trả lời tốt nhất!
Williaan Lopes

Thư viện ở đây: github.com/kentcdodds/cross-env - và trang đó nói rằng bao gồm các nhà phát triển chéo trong devDependencies npm install --save-dev cross-env; điều này cũng giúp khắc phục lỗi 'env' is not recognized as an internal or external commandkhi tập lệnh npm nói env VARNAME=varvalue && ...(chỉ cần xóa env và chèn cross-env thay thế). Không cần nhà phát triển cài đặt một cái gì đó trên toàn cầu hoặc có các tập lệnh npm khác nhau cho các nền tảng khác nhau!
Marcus

47

Sử dụng win-node-env , Để sử dụng, chỉ cần chạy bên dưới lệnh trên cmdhoặc power shellhoặc git bash:

npm install -g win-node-env

Sau đó, mọi thứ giống như Linux.


2
Tôi thích cách tiếp cận này tốt hơn vì nó tránh phải sửa đổi mã để làm cho nó hoạt động trên windows
Mickey Puri

1
Đúng. Tôi nghĩ rằng đây là câu trả lời thích hợp nhất. Tôi thích cách tiếp cận này.
Sunny Sultan

Kính gửi @ JeffreyNicholsonCarré, cảm ơn vì nhận xét đáng yêu của bạn, hy vọng nó sẽ giúp bạn
AmerllicA

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

sẽ khiến NODE_ENV chứa một khoảng trắng ở cuối:

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

Như đã đề cập trong một bình luận ở đây , sử dụng điều này thay thế:

NODE_ENV=production&& nodemon app/app.js

Thế còn NODE_ENV="production"?
TheFrost

Tôi không nhớ, nhưng không để lại câu hỏi chưa được trả lời: Tôi thấy rằng tôi đã đưa ra câu trả lời được đưa ra bởi Susan-stack. Tôi thực sự xin lỗi.
TheFrost

Tôi đã thêm một trim () trong cấu hình webpack: `plugins: [new webpack.DefinePlugin ({" process.env ": {NODE_ENV: JSON.opesify (process.env.NODE_ENV.trim ())}})],`
Lee Comstock

Sự khác biệt giữa đơn &và đôi là &&gì? Cả hai dường như làm việc cho tôi.
theprogrammer

13

Thay đổi tập lệnh của bạn để phù hợp với Windows là một nỗi đau của hoàng gia. Cố gắng tìm ra các bản dịch Windows phù hợp và duy trì 2 bộ tập lệnh là không có cách nào để sống cuộc sống của bạn.

Việc cấu hình npm để sử dụng bash trên Windows dễ dàng hơn nhiều và các tập lệnh của bạn sẽ chạy như vậy.

Đơn giản chỉ cần chạy npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe". Hãy chắc chắn rằng đường dẫn đến bash thực thi là chính xác cho máy của bạn. Bạn có thể sẽ cần phải bắt đầu một phiên bản mới của thiết bị đầu cuối để thay đổi có hiệu lực.

Ảnh chụp màn hình dưới đây minh họa lợi ích.

  1. npm ERR! khi cố gắng chạy script ban đầu.
  2. Tập lệnh được sửa đổi cho Windows sử dụng chạy nhưng không hiển thị thông báo trả về.
  3. Sau khi cập nhật cấu hình npm để sử dụng bash, tập lệnh sẽ chạy và trả về thông báo thích hợp.

Bắt các tập lệnh npm để chạy như trong Windows


7

Đối với những người sử dụng Git Bash và có vấn đề với npm run <script>,

Chỉ cần đặt npm để sử dụng Git Bash để chạy các tập lệnh

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (thay đổi đường dẫn theo cài đặt của bạn)

Và sau đó npm sẽ chạy các tập lệnh với Git Bash, vì vậy các cách sử dụng như vậy NODE_ENV=sẽ hoạt động đúng.



1

Hầu hết các câu trả lời trên đó không giúp tôi ..

Điều gì đã giúp tôi là NODE_ENV=production&& nodemon app/app.js

Hãy lưu ý về không gian. Chúc may mắn.


1

Đối với cửa sổ mở git bash và thử

NODE_ENV=production node app.js


1
Nó hoạt động trong Git Bash (mintty) khi được sử dụng trực tiếp. Nhưng khi tôi chạy cùng một lệnh từ đó npm <scripts_entry>, tôi gặp lỗi với các cụm từ khác nhau nhưng có nghĩa tương đương: nó coi tên env var là một tệp thực thi.
Andrey Mikhaylov - lolmaus

2
@ AndreyMikhaylov-lolmaus npm run <script>sử dụng cmd Windows làm mặc định để chạy các lệnh. Bạn có thể thiết lập nó để sử dụng Git Bash. npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"Và sau đó npm runsẽ sử dụng Git Bash để chạy các kịch bản.
dùng3790180

1

Nếu có ai khác đến đây như tôi đang cố gắng tìm giải pháp cho lỗi:

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

Lý do tôi nhận được điều này là vì tôi đã chuyển một giải pháp góc cạnh từ máy phát triển mac sang máy tính để bàn windows 10. Đây là cách tôi giải quyết nó.

  1. chạy npm install --save-dev cross-env

  2. đi vào tệp pack.json của tôi và thay đổi tất cả các tham chiếu tập lệnh từ env <whatever>sangcross-env <whatever>

Sau đó, các lệnh của tôi như: npm run start:some_random_environment_varbây giờ chạy tốt trên Windows 10.


Đối với người dùng Windows, chỉ cần chuyển sang Bash là một chút bí mật, đặc biệt là khi phần còn lại chỉ hoạt động. Đây là một giải pháp tốt mà làm việc cho tôi.
FuZZbaLL

0

process.env.NODE_ENV đang thêm một khoảng trắng làm điều này

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

0

Đối với các cửa sổ, bạn có thể làm điều đó như

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.