ฉันจะตั้งค่า NODE_ENV = ผลิตบน Windows ได้อย่างไร


340

ใน Ubuntu มันค่อนข้างง่าย ฉันสามารถเรียกใช้แอปพลิเคชันโดยใช้:

$ NODE_ENV=production node myapp/app.js

อย่างไรก็ตามสิ่งนี้ไม่ทำงานบน Windows มีไฟล์กำหนดค่าที่ฉันสามารถตั้งค่าแอตทริบิวต์ได้หรือไม่


สำหรับโซลูชันที่มีหลายแพลตฟอร์มคุณสามารถค้นหาคำตอบstackoverflow.com/a/57509175/11127383
Daniel Danielecki

คำตอบ:


486

Windows รุ่นปัจจุบันใช้ Powershell เป็นเชลล์เริ่มต้นดังนั้นให้ใช้:

$env:NODE_ENV="production"

ตามคำตอบของ @ jsalonen ด้านล่าง หากคุณอยู่ใน CMD (ซึ่งไม่ได้รับการดูแลอีกต่อไป) ให้ใช้

set NODE_ENV=production

ควรดำเนินการในพรอมต์คำสั่งที่คุณต้องการเรียกใช้แอปพลิเคชัน Node.js ของคุณ

บรรทัดข้างต้นจะตั้งค่าตัวแปรสภาพแวดล้อม NODE_ENV สำหรับพรอมต์คำสั่งที่คุณดำเนินการคำสั่ง

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


112
สำหรับทุกคนที่ยังคงดิ้นรนกับสิ่งนี้: set NODE_ENV=production && node app. กำหนดค่าอื่น ๆ เพื่อความสะดวกของคุณตาม:package.json "scripts": { "start": "set NODE_ENV=production && node app" }
Amberlamps

5
@ShuruiLiu คำสั่งจะไม่แสดงผลใด ๆ แต่คุณสามารถพิมพ์echo %NODE_ENV%เพื่อตรวจสอบค่าปัจจุบัน
Jani Hartikainen

169
หัวขึ้น: "set NODE_ENV = production &&" เพิ่มช่องว่างต่อท้ายให้กับตัวแปร ฉันต้องการ "set NODE_ENV = production &&" เพื่อหลีกเลี่ยงพื้นที่เพิ่มเติมซึ่งทำให้แอปโหนดแตกเช่น Ghost
อืม

12
@ อำพันหลอดไฟที่ไม่ใช่ทางออกที่ดีเพราะ NODE_ENV นั้นเป็นฮาร์ดโค้ดสำหรับทุกเครื่อง เป้าหมายที่แท้จริงคือการเปลี่ยน env โดยเครื่องโดยใช้ตัวแปร env หรือส่งผ่านค่าที่บรรทัดคำสั่งไม่ใช่ฮาร์ดโค้ดในไฟล์ package.json
Alexander Mills

6
ฉันคิดว่าการใช้cross-envเป็นทางออกที่ดีกว่าสำหรับปัญหานี้หากทีมของคุณทำงานบนระบบปฏิบัติการแบบผสม คำตอบจาก @MoOx จะเป็นคำตอบของฉันสำหรับคำถามนี้
ฟิลค์

230

ฉันเพิ่งพบแพ็คเกจ Node.js ที่ดีที่สามารถช่วยให้มากในการกำหนดตัวแปรสภาพแวดล้อมโดยใช้ไวยากรณ์ที่ไม่ซ้ำกันข้ามแพลตฟอร์ม

https://www.npmjs.com/package/cross-env

อนุญาตให้คุณเขียนสิ่งนี้:

cross-env NODE_ENV=production my-command

ซึ่งสะดวกสวย! ไม่มีคำสั่งเฉพาะของ Windows หรือ Unix อีกต่อไป!


25
ในขณะที่คำตอบแรกเป็นจริง ฉันคิดว่าคำตอบนี้น่าเชื่อถือที่สุดและควรใช้
d4rklit3

นี่เป็นทางออกที่ยอดเยี่ยม!
คิริล Gusyatin

เรียบง่ายและสมบูรณ์แบบในการแก้ปัญหาของฉัน ฉันสามารถสร้างบน Linux ได้เท่านั้น วิธีนี้แก้ไขได้ทั้ง Linux และ Windows
tista3

คำตอบนี้สมควรได้รับความรักมากขึ้นควรจะได้รับการยอมรับอย่างใดอย่างหนึ่ง :)
Honza Kalfus

นี่เป็นคำตอบที่ดีที่สุดสำหรับฉันด้วย
knaos

166

ใน PowerShell:

$env:NODE_ENV="production"

4
ps: อย่าลืม $ และราคา;)
George

6
set NODE_ENV=productionใช้งานไม่ได้สำหรับฉันใน PowerShell แต่สิ่งนี้ทำได้ ขอบคุณ!
โกรธ

6
ดิ้นรนเพื่อให้สิ่งนี้ใช้งานได้จาก Powershell ภายใน Visual Studio Code คิดว่าฉันจะออกทางออกที่นี่ ฉันพยายามเรียกใช้คำสั่ง "อึก" ในขณะที่มั่นใจว่าตั้งค่า env ถูกต้อง $env:NODE_ENV="development"; gulp runMytaskนี่คือสิ่งที่แผลขึ้นทำงานสำหรับฉัน: บันทึกเครื่องหมายทวิภาคในนั้น ไฟล์ gulp สามารถใช้ตรรกะตามเงื่อนไขบน process.env.NODE_ENV หากคุณไม่ได้ตั้งค่ามันจะไม่ถูกกำหนด
dvsoukup

2
วิธีแก้ปัญหานี้ใช้ได้กับฉันด้วย windows 10 และ
webpack

1
งานนี้สมบูรณ์แบบ แต่cross-env NODE_ENV=productionตัวเลือกนี้เป็นทางออกที่ดีกว่าหากใช้คำสั่ง npm จาก package.json ซึ่งต้องการให้ตั้งค่า env ง่ายเกินไปที่จะปล่อยให้ env ตั้งค่าไว้ที่ dev / prod หลังจากใช้ตัวเลือก $ env: NODE_ENV
Drenai

105

มันจะเหมาะถ้าคุณสามารถตั้งค่าพารามิเตอร์ในบรรทัดเดียวกันกับการโทรของคุณเพื่อเริ่ม Node.js บน Windows ดูต่อไปนี้อย่างระมัดระวังและเรียกใช้ตรงตามที่ระบุไว้:

คุณมีสองตัวเลือกเหล่านี้:

  1. ที่บรรทัดคำสั่ง:

    set NODE_ENV=production&&npm start

    หรือ

    set NODE_ENV=production&&node index.js
  2. เคล็ดลับในการทำงานบน Windows คือคุณต้องลบช่องว่างก่อนและหลัง "&&" กำหนดค่าไฟล์ package.json ของคุณด้วย start_windows (ดูด้านล่าง) ด้านล่าง จากนั้นเรียกใช้ "npm run start_windows" ที่บรรทัดคำสั่ง

    //package.json
    
    "scripts": {
      "start": "node index.js"
      "start_windows": "set NODE_ENV=production&&node index.js"
    }

1
DEF ต้องการทราบวิธีทำให้การทำงานเป็นแบบนี้
SC_Chupacabra

2
ทำงานให้ฉัน ต้องลบช่องว่างแม้ว่า "ตั้ง NODE_ENV = การผลิต && nodemon server.js"
SC_Chupacabra

2
หวังว่าฉันจะได้อ่านสิ่งนี้ก่อนที่จะลองตอบคำถามข้างต้นจะช่วยฉันได้บ้าง : \
Jeff

1
ในบันทึกที่เกี่ยวข้องอย่างคลุมเครือฉันพบว่า && ไม่ทำงานตามที่คาดไว้ใน windows เมื่อผูกคำสั่งหลายคำพร้อมกัน หากมีข้อสงสัยลองใช้ | แทน
Mike

1
สิ่งนี้ใช้ได้กับฉันบนเครื่อง windows 10 64 บิตจากทั้ง cmd และ power-shell
Ani

30

คุณสามารถใช้ได้

npm run env NODE_ENV=production

มันอาจเป็นวิธีที่ดีที่สุดในการทำเพราะมันเข้ากันได้กับทั้ง Windows และ Unix

จากเอกสารคู่มือรันสคริปต์ npm :

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


3
เราจะรันคำสั่งอื่นด้วยชุดตัวแปรได้อย่างไร สิ่งนี้ดูเหมือนจะไม่ทำงาน: npm run env NODE_ENV = การผลิต && echo $ NODE_ENV พวกมันอาจถูกประหารชีวิตในสองเชลล์ที่แตกต่างกันหรือไม่?
Jonas Kello

1
จากสิ่งที่ฉันเห็นนี่มันใช้งานไม่ได้เลย จากเอกสารเองมันเป็นเพียงรายการตัวแปรสภาพแวดล้อมไม่ได้ตั้งค่า
kumarharsh

2
ไม่ได้ผลสำหรับฉัน มันเป็นรายการ vars แสดง var ที่คุณระบุ แต่บนรันไทม์ var ไม่สามารถใช้ได้ในกระบวนการ
env.YOUR_VAR

3
@JonasKello คุณจะใช้นี้เป็นผู้ได้รับมอบอำนาจ แทนที่ด้วยคำสั่งที่คุณต้องการ npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'--node -e 'console.log(process.env.NODE_ENV)'
Pauan

พยายามทำตามคำสั่งนี้npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.jsและ ... ไม่มีอะไรเกิดขึ้น ฉันไม่แน่ใจว่าวิธีนี้ใช้ได้กับ windows
jcollum

14

หากคุณใช้ Visual Studio กับ NTVS คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมในหน้าคุณสมบัติโครงการ:

Visual Studio NTVS คุณสมบัติโครงการ

อย่างที่คุณเห็นการเลื่อนลงของการกำหนดค่าและแพลตฟอร์มถูกปิดใช้งาน (ฉันไม่ได้ดูสาเหตุที่เป็นเช่นนี้) แต่ถ้าคุณแก้ไข.njsprojไฟล์ของคุณดังนี้:

  <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=development</Environment>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <DebugSymbols>true</DebugSymbols>
    <Environment>NODE_ENV=production</Environment>
  </PropertyGroup>

เมนูแบบเลื่อนลง 'Debug / Release' จะควบคุมวิธีการตั้งค่าตัวแปรก่อนเริ่ม Node.js


12

ฉันเขียนโมดูลwin-node-envซึ่งคุณสามารถรันคำสั่งของคุณเหมือนกับที่คุณใช้ใน * nix

NODE_ENV=production node myapp/app.js

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

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

npm install -g win-node-env

สิ่งที่ฉันกำลังมองหา! เพื่อรันด้วยสคริปต์ npm และยังสามารถทำงานกับเครื่องมือโหนด cli อื่น ๆ เช่นตลก ดังนั้น "set NODE_ENV = debug & cls & jest ... " กลายเป็น "cls & NODE_ENV = แก้ไขข้อผิดพลาด"
Z. Khullah

9

ประสบการณ์ของฉันในการใช้ Node.js บน Windows 7 64 บิตใน Visual Studio 2013 คือสิ่งที่คุณต้องใช้

setx NODE_ENV development

จากหน้าต่าง cmd และคุณต้องรีสตาร์ท Visual Studio เพื่อให้ค่าใหม่เป็นที่รู้จัก

ไวยากรณ์ที่ตั้งไว้เป็นระยะเวลาของหน้าต่าง cmd ที่มันถูกตั้งค่า

ทดสอบอย่างง่าย ๆ ใน Node.js:

console.log('process.env.NODE_ENV = ' + process.env.NODE_ENV);

มันจะส่งกลับ 'undefined' เมื่อใช้ set และมันจะคืนค่า 'development' ถ้าใช้ setx และทำการรีสตาร์ท Visual Studio


cmd- ไม่ใช่ PowerShell? เอ่อมาที่หน้าต่างมารวมกัน
jcollum

คำพูดของคุณเกี่ยวกับการรีสตาร์ทโค้ด VS นั้นมีประโยชน์จริง ๆ !
Yury Kozlov

8

นี่คือวิธีบรรทัดที่ไม่ใช่คำสั่ง:

ใน Windows 7 หรือ 10 ให้พิมพ์สภาพแวดล้อมลงในช่องค้นหาของเมนูเริ่มและเลือกแก้ไขตัวแปรสภาพแวดล้อมของระบบ

หรือไปที่แผงควบคุม \ ระบบและความปลอดภัย \ ระบบแล้วคลิกการตั้งค่าระบบขั้นสูง

สิ่งนี้ควรเปิดกล่องโต้ตอบคุณสมบัติของระบบโดยเลือกแท็บขั้นสูง ที่ด้านล่างคุณจะเห็นปุ่มตัวแปรสภาพแวดล้อม ... คลิกที่นี่

กล่องโต้ตอบระบบ

กล่องโต้ตอบตัวแปรสภาพแวดล้อมจะเปิดขึ้น

กล่องโต้ตอบตัวแปรสภาพแวดล้อม

ที่ด้านล่างภายใต้ตัวแปรระบบให้เลือกใหม่ ... ซึ่งจะเปิดกล่องโต้ตอบตัวแปรระบบใหม่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนชื่อตัวแปรและค่าแล้วคลิกตกลง

คุณจะต้องปิดพรอมต์คำสั่งทั้งหมดและรีสตาร์ทเซิร์ฟเวอร์ของคุณเพื่อให้ตัวแปรใหม่พร้อมใช้งานสำหรับ process.env หากยังไม่ปรากฏขึ้นให้รีสตาร์ทเครื่อง


2
ขอบคุณ! ฉันทำทั้งหมดนี้แล้ว แต่มันไม่ทำงานจนกว่าฉันจะรีสตาร์ทเซิร์ฟเวอร์
Marcel Lamothe

7

เพื่อชี้แจงและสำหรับคนอื่นที่อาจดึงผมออกมา ...

หากคุณกำลังใช้ทุบตีคอมไพล์บน Windows , ดูเหมือนจะไม่ทำงานset node_env=production&& node whatever.js ให้ใช้คำสั่งดั้งเดิม จากนั้นใช้set node_env=production&& node whatever.jsงานตามที่คาดไว้

กรณีการใช้งานของฉัน:

ฉันพัฒนาบน Windows เนื่องจากเวิร์กโฟลว์ของฉันเร็วขึ้นมากแต่ฉันต้องตรวจสอบให้แน่ใจว่ามิดเดิลแวร์เฉพาะการพัฒนาแอปพลิเคชันของฉันไม่ทำงานในสภาพแวดล้อมการผลิต


6

วิธีเรียกใช้แอปพลิเคชันของคุณใน PowerShell (เนื่องจาก&&ไม่ได้รับอนุญาต):

($env:NODE_ENV="production") -and (node myapp/app.js)

โปรดทราบว่าผลลัพธ์ข้อความของสิ่งที่เซิร์ฟเวอร์ทำถูกระงับและฉันไม่แน่ใจว่าสามารถแก้ไขได้หรือไม่ (ขยายคำตอบของ @ jsalonen)


มันใช้งานไม่ได้สำหรับฉัน:"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
Evandro Pomatti

4

ที่หนึ่งในประเภท PowerShell

$env:NODE_ENV="production"

จากนั้นพิมพ์

node fileName.js

มันจะทำงานอย่างสมบูรณ์แบบการแสดงผลทั้งหมด


2

สำหรับตัวแปรสภาพแวดล้อมหลายตัว.envไฟล์จะสะดวกกว่า:

# .env.example, committed to repo
DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3
# .env, private, .gitignore it
DB_HOST=real-hostname.example.com
DB_USER=real-user-name
DB_PASS=REAL_PASSWORD

ใช้งานง่ายด้วยdotenv-safe:

  1. ติดตั้งด้วย npm install --save dotenv-safeติดตั้งด้วย
  2. รวมไว้ในรหัสของคุณ (ดีที่สุดในตอนเริ่มต้นindex.js) และใช้กับprocess.envคำสั่งโดยตรง:
require('dotenv').load()
console.log(process.env.DB_HOST)   

อย่าลืมที่จะไม่สนใจ.envไฟล์ใน VCS

โปรแกรมของคุณจะทำงานล้มเหลวอย่างรวดเร็วหากตัวแปร "ที่กำหนด" ใน.env.exampleถูกยกเลิกการตั้งค่าไม่ว่าจะเป็นตัวแปรสภาพแวดล้อมหรือ.envระบบ


ไฟล์. env สะดวกสำหรับความลับและเพิ่มขั้นตอนพิเศษของความซับซ้อนเมื่อตั้งค่าเมื่อมอบหมายคนใหม่ให้กับโครงการหรือใช้การเปลี่ยนแปลงกับพวกเขา
coiso

โดยไม่ต้อง @coiso ทั่วไปสถานที่ที่พบที่คุณจะวางหลายตัวแปร env? ไม่ว่าจะเป็นไฟล์สคริปต์หรือในการตั้งค่าแบบพึ่งพา IDE คุณจะผูกพันกับเครื่องมือที่เฉพาะเจาะจงยิ่งขึ้น สิ่งนี้ทำให้การรวมสมาชิกในทีมเข้าด้วยกันเป็นเรื่องยากยิ่งขึ้น
Dominik

2

ในกรณีที่คุณใช้งานเทอร์มินัล GITBASH "set NODE_ENV=production" จะไม่ทำงานสิ่งที่คุณทำได้คือพิมพ์ "ส่งออก"NODE_ENV=production"


0

สิ่งนี้จะไม่ตั้งค่าตัวแปร แต่มีประโยชน์ในหลายกรณี ฉันจะไม่แนะนำให้ใช้สิ่งนี้ในการผลิต แต่มันก็โอเคถ้าคุณเล่นกับ npm

npm install --production

0

ฉันใช้สคริปต์ npm เพื่อใช้ในการทำงานโดยไม่มี "&&"

NODE_ENV = ทดสอบการทำงานของ npm run seed-db


0

รีสตาร์ทรหัส VS หาก NODE_ENV หรือตัวแปรสภาพแวดล้อมอื่นใดไม่ได้ให้ค่าที่ถูกต้อง สิ่งนี้จะทำงานหลังจากรีสตาร์ท

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.