“ NODE_ENV” ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกคำสั่งที่ทำงานได้หรือไฟล์แบตช์


208

ฉันกำลังพยายามตั้งค่าสภาพแวดล้อมสำหรับแอป Node.js แต่ฉันได้รับข้อผิดพลาดนี้ทุกครั้ง

"NODE_ENV" ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอกคำสั่งที่ทำงานได้หรือไฟล์แบตช์

นี่หมายถึงอะไรและฉันจะแก้ปัญหานี้ได้อย่างไร

ฉันกำลังใช้ Windows และพยายามset NODE_ENV=developmentแต่ก็ไม่มีโชค

คำตอบ:


273

ดูเหมือนว่าข้อผิดพลาดของคุณมาจากความพยายามที่จะเรียกใช้บางสิ่งเช่นนี้ (ซึ่งทำงานใน Linux)

NODE_ENV=development node foo.js

เทียบเท่าใน Windows จะเป็น

SET NODE_ENV=development
node foo.js

ทำงานในเชลล์คำสั่งเดียวกัน คุณกล่าวถึงชุด NODE_ENV ไม่ทำงาน แต่ไม่ชัดเจนว่า / เมื่อคุณดำเนินการ


ขอบคุณจิมฉันใช้มันในบรรทัดคำสั่งและลบออกจากไฟล์ package.json แต่หลังจากนั้นฉันก็วิ่งเข้าไปหาคนอื่น ดูเหมือนว่าโหนดโมดูลไม่ได้รับการรองรับอย่างสมบูรณ์จากหน้าต่าง มีข้อผิดพลาดอื่นกับ bcrypt และ gyp
krozero

ไม่ใช่ผู้เชี่ยวชาญที่นี่ แต่ bcrypt แสดงการสนับสนุนสำหรับ windows แต่ต้องการ openSSL ไม่แน่ใจว่าสิ่งนั้นช่วยได้หรือไม่ ถ้าไม่ใช่อาจต้องการโพสต์คำถามใหม่เนื่องจากสถานการณ์เปลี่ยนไปเล็กน้อย
จิมโอนีล

5
ขณะนี้ใช้งานได้จริงฉันคิดว่า @ Susan-stack ให้คำตอบที่ถูกต้อง - โซลูชันข้ามแพลตฟอร์มและไม่เปลี่ยนบรรทัดให้ทำงานบน windows แต่แตก OS อื่น ๆ
justabuzz

คำตอบของ upvoted Susan - การตอบกลับดั้งเดิมคาดการณ์โมดูล cross-env
Jim O'Neil

250

ฉันเขียนโมดูลสำหรับสิ่งนี้: win-node-env win-โหนด

มันสร้างNODE_ENV.cmdชุดที่NODE_ENVตัวแปรสภาพแวดล้อมและวางกระบวนการเด็กกับส่วนที่เหลือของคำสั่งและ args

เพียงแค่ติดตั้งมัน (ทั่วโลก) และเรียกใช้คำสั่งสคริปต์ npm ของคุณมันควรจะทำให้มันทำงานโดยอัตโนมัติ

npm install -g win-node-env

13
มันได้ผล! และฉันไม่ต้องเปลี่ยนคำสั่งใด ๆ นี่คือคำตอบ
Abhimanyu Pathania

3
นี่คือ aswer ที่ง่ายที่สุด
mrTurkay

1
ฉันจะเพิ่มตัวแปรที่กำหนดเองลงในสคริปต์ของคุณได้อย่างไร
ivan-ivory

1
@ ivan-ivory ตัวแปรแรก (เช่น NODE_ENV) ต้องอยู่เหมือนเดิม (ไม่เช่นนั้นจะต้องเป็นสคริปต์แยกต่างหากทั้งหมด) และสำหรับการเพิ่มตัวแปรที่กำหนดเองหลังจากนั้น (เช่น NODE_ENV = dev SOME_VAR = val) ฉันจะต้องแก้ไขตรรกะของสคริปต์เพื่อแยกตัวแปรเพิ่มเติมจาก process.argv ฉันกำลังคิดเกี่ยวกับมัน แต่ไม่มีเวลา รู้สึกฟรีเพื่อดึงคำขอ
laggingreflex

1
ไม่ได้ผลสำหรับฉัน ฉันได้รับ:> NODE_ENV = การพัฒนา node_modules / .bin / nodemon --ignore ./public/tones/ --exec เซิร์ฟเวอร์ babel-node / index.js 'node_modules' ไม่รู้จักว่าเป็นคำสั่งภายในหรือภายนอกโปรแกรมที่ทำงานได้ หรือแบทช์ไฟล์
Rod Lima

173

สำหรับ windows ใช้&ในระหว่างคำสั่งด้วย ชอบ,

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

7
คำสั่งใช้งานได้ แต่ค่าของNODE_ENVจะเป็น 'การพัฒนา' (จะมีการเว้นวรรคระหว่าง 't' และ '&' โดยNODE_ENV)
roroinpho21

1
สิ่งที่ @ roroinpho21 พูด ตอนนี้ฉันมี.trim()ค่าในภายหลังเพื่อให้การprocess.env.NODE_ENV == 'production'ทำงาน ยังไงบ้างที่จะหลีกเลี่ยงปัญหานี้ในผู้เผยแพร่ออนไลน์?
Flion

คนที่ไม่สามารถทำให้มันทำงาน "test-unit": "SET NODE_ENV=test & mocha --require co-mocha 'test.js'" ผิด จริง"test-unit": "SET NODE_ENV=test & mocha --require co-mocha test.js" คุณต้องลบ ' ' ไฟล์ js โดยรอบ
Serhat Türkman

สิ่งนี้ทำในสิ่งที่คุณต้องการอย่างแน่นอนหากคุณกำลังพยายามเรียกใช้ npm เริ่มตั้งโหมดการผลิตเป็นการผลิต
เจสัน

90
  1. npm install "cross-env" โมดูล.
  2. cross-env NODE_ENV=development node foo.jsปรับเปลี่ยนรหัสเป็น npm run buildจากนั้นคุณสามารถเรียกใช้เช่น

10
โปรดอย่าลืมรวมcross-envการอ้างอิงในpackage.json
Aminah Nuraini

1
คำตอบที่ดีที่สุดข้าม env!
Williaan Lopes

ห้องสมุดอยู่ที่นี่: github.com/kentcdodds/cross-env - และหน้านั้นบอกว่าจะรวม cross-dev ใน devDependencies npm install --save-dev cross-env; สิ่งนี้จะช่วยให้มีข้อผิดพลาด'env' is not recognized as an internal or external commandเมื่อสคริปต์ npm กล่าวว่าenv VARNAME=varvalue && ...(เพียงลบ env และแทรก cross-env แทน) ไม่จำเป็นสำหรับนักพัฒนาในการติดตั้งบางอย่างทั่วโลกหรือมีสคริปต์ npm ที่แตกต่างกันสำหรับแพลตฟอร์มที่แตกต่างกัน!
มาร์คัส

47

ใช้win-node-envสำหรับการใช้งานเพียงแค่เรียกใช้คำสั่งด้านล่างในของคุณcmdหรือpower shellหรือgit bash:

npm install -g win-node-env

หลังจากนั้นทุกอย่างก็เหมือน Linux


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

จะทำให้ NODE_ENV มีช่องว่างที่ท้าย:

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

ตามที่ระบุไว้ในความคิดเห็นที่นี่ใช้สิ่งนี้แทน:

NODE_ENV=production&& nodemon app/app.js

13

การเปลี่ยนสคริปต์ของคุณเพื่อรองรับ Windows ถือเป็นความเจ็บปวด การพยายามคิดให้ดีว่าการแปล Windows ที่เหมาะสมและการบำรุงรักษาสคริปต์ 2 ชุดนั้นไม่มีทางที่จะใช้ชีวิตของคุณได้

มันง่ายกว่าที่จะกำหนดค่า npm ให้ใช้ bash บน Windows และสคริปต์ของคุณจะทำงานตามที่เป็นอยู่

npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"ทำงานเพียงแค่ ตรวจสอบให้แน่ใจว่าเส้นทางไปสู่การปฏิบัติการทุบตีถูกต้องสำหรับเครื่องของคุณ คุณอาจต้องเริ่มต้นอินสแตนซ์ใหม่ของเครื่องเพื่อให้การเปลี่ยนแปลงมีผล

ภาพหน้าจอด้านล่างแสดงให้เห็นถึงประโยชน์

  1. npm ข้อผิดพลาด! เมื่อพยายามเรียกใช้สคริปต์ในตอนแรก
  2. สคริปต์ที่แก้ไขสำหรับ Windows ใช้งานอยู่ แต่ไม่แสดงข้อความตอบกลับ
  3. หลังจากอัปเดตการกำหนดค่า npm เพื่อใช้ bash สคริปต์จะทำงานและส่งคืนข้อความที่เหมาะสม

รับสคริปต์ npm เพื่อให้ทำงานเหมือนใน Windows


7

สำหรับผู้ที่ใช้ Git ทุบตีและปัญหาที่มีกับnpm run <script>,

เพียงตั้งค่า npm ให้ใช้ Git Bash เพื่อเรียกใช้สคริปต์

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe" (เปลี่ยนเส้นทางตามการติดตั้งของคุณ)

จากนั้น npm จะเรียกใช้สคริปต์ด้วย Git Bash ดังนั้นประเพณีเช่นNODE_ENV=นั้นจะทำงานได้อย่างถูกต้อง



2

สำหรับ windows เปิด git bashแล้วลอง

NODE_ENV=production node app.js


1
มันทำงานใน Git Bash (mintty) เมื่อใช้โดยตรง แต่เมื่อฉันเรียกใช้คำสั่งเดียวกันจากnpm <scripts_entry>ฉันได้รับข้อผิดพลาดที่มีการใช้ถ้อยคำที่แตกต่างกัน แต่ความหมายเทียบเท่า: มันปฏิบัติต่อชื่อ env var เป็นปฏิบัติการ
Andrey Mikhaylov - lolmaus

2
@ AndreyMikhaylov-lolmaus npm run <script>ใช้ Windows cmd เป็นค่าเริ่มต้นในการเรียกใช้คำสั่ง คุณสามารถตั้งค่าให้ใช้ Git Bash npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"จากนั้นnpm runจะใช้ Git Bash เพื่อเรียกใช้สคริปต์
3790180

1

คำตอบส่วนใหญ่ไม่ได้ช่วยฉัน ..

สิ่งที่ช่วยฉันได้คือ NODE_ENV=production&& nodemon app/app.js

จดพื้นที่ โชคดี.


1

หากใครมาที่นี่เหมือนฉันพยายามหาทางออกสำหรับข้อผิดพลาด:

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

เหตุผลที่ฉันได้รับสิ่งนี้คือฉันกำลังโยกย้ายโซลูชันเชิงมุมจากเครื่องพัฒนา mac ไปยังเดสก์ท็อป windows 10 นี่คือวิธีที่ฉันแก้ไขมัน

  1. วิ่ง npm install --save-dev cross-env

  2. ไปที่ไฟล์ package.json ของฉันและเปลี่ยนการอ้างอิงสคริปต์ทั้งหมดจากenv <whatever>เป็นcross-env <whatever>

จากนั้นคำสั่งของฉันเช่น: npm run start:some_random_environment_varตอนนี้ทำงานได้ดีบน Windows 10


สำหรับผู้ใช้ Windows เพียงแค่เปลี่ยนไปใช้ Bash เป็นเรื่องเล็กน้อยโดยเฉพาะอย่างยิ่งเมื่อที่เหลือใช้งานได้ นี่เป็นทางออกที่ดีสำหรับฉัน
FuZZbaLL


0

สำหรับหน้าต่างคุณสามารถทำได้

"scripts": {
    "start:prod" : "SET NODE_ENV=production & nodemon app.js",
    "start:dev" : "SET NODE_ENV=development & nodemon app.js"
},
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.