ใน Ubuntu มันค่อนข้างง่าย ฉันสามารถเรียกใช้แอปพลิเคชันโดยใช้:
$ NODE_ENV=production node myapp/app.js
อย่างไรก็ตามสิ่งนี้ไม่ทำงานบน Windows มีไฟล์กำหนดค่าที่ฉันสามารถตั้งค่าแอตทริบิวต์ได้หรือไม่
ใน Ubuntu มันค่อนข้างง่าย ฉันสามารถเรียกใช้แอปพลิเคชันโดยใช้:
$ NODE_ENV=production node myapp/app.js
อย่างไรก็ตามสิ่งนี้ไม่ทำงานบน Windows มีไฟล์กำหนดค่าที่ฉันสามารถตั้งค่าแอตทริบิวต์ได้หรือไม่
คำตอบ:
Windows รุ่นปัจจุบันใช้ Powershell เป็นเชลล์เริ่มต้นดังนั้นให้ใช้:
$env:NODE_ENV="production"
ตามคำตอบของ @ jsalonen ด้านล่าง หากคุณอยู่ใน CMD (ซึ่งไม่ได้รับการดูแลอีกต่อไป) ให้ใช้
set NODE_ENV=production
ควรดำเนินการในพรอมต์คำสั่งที่คุณต้องการเรียกใช้แอปพลิเคชัน Node.js ของคุณ
บรรทัดข้างต้นจะตั้งค่าตัวแปรสภาพแวดล้อม NODE_ENV สำหรับพรอมต์คำสั่งที่คุณดำเนินการคำสั่ง
ในการตั้งค่าตัวแปรสภาพแวดล้อมทั่วโลกเพื่อให้คงอยู่นอกเหนือจากพรอมต์คำสั่งเดียวคุณสามารถค้นหาเครื่องมือจากระบบในแผงควบคุม (หรือโดยการพิมพ์ 'สภาพแวดล้อม' ลงในช่องค้นหาในเมนูเริ่ม)
set NODE_ENV=production && node app
. กำหนดค่าอื่น ๆ เพื่อความสะดวกของคุณตาม:package.json
"scripts": { "start": "set NODE_ENV=production && node app" }
echo %NODE_ENV%
เพื่อตรวจสอบค่าปัจจุบัน
cross-env
เป็นทางออกที่ดีกว่าสำหรับปัญหานี้หากทีมของคุณทำงานบนระบบปฏิบัติการแบบผสม คำตอบจาก @MoOx จะเป็นคำตอบของฉันสำหรับคำถามนี้
ฉันเพิ่งพบแพ็คเกจ Node.js ที่ดีที่สามารถช่วยให้มากในการกำหนดตัวแปรสภาพแวดล้อมโดยใช้ไวยากรณ์ที่ไม่ซ้ำกันข้ามแพลตฟอร์ม
https://www.npmjs.com/package/cross-env
อนุญาตให้คุณเขียนสิ่งนี้:
cross-env NODE_ENV=production my-command
ซึ่งสะดวกสวย! ไม่มีคำสั่งเฉพาะของ Windows หรือ Unix อีกต่อไป!
ใน PowerShell:
$env:NODE_ENV="production"
set NODE_ENV=production
ใช้งานไม่ได้สำหรับฉันใน PowerShell แต่สิ่งนี้ทำได้ ขอบคุณ!
$env:NODE_ENV="development"; gulp runMytask
นี่คือสิ่งที่แผลขึ้นทำงานสำหรับฉัน: บันทึกเครื่องหมายทวิภาคในนั้น ไฟล์ gulp สามารถใช้ตรรกะตามเงื่อนไขบน process.env.NODE_ENV หากคุณไม่ได้ตั้งค่ามันจะไม่ถูกกำหนด
cross-env NODE_ENV=production
ตัวเลือกนี้เป็นทางออกที่ดีกว่าหากใช้คำสั่ง npm จาก package.json ซึ่งต้องการให้ตั้งค่า env ง่ายเกินไปที่จะปล่อยให้ env ตั้งค่าไว้ที่ dev / prod หลังจากใช้ตัวเลือก $ env: NODE_ENV
มันจะเหมาะถ้าคุณสามารถตั้งค่าพารามิเตอร์ในบรรทัดเดียวกันกับการโทรของคุณเพื่อเริ่ม Node.js บน Windows ดูต่อไปนี้อย่างระมัดระวังและเรียกใช้ตรงตามที่ระบุไว้:
คุณมีสองตัวเลือกเหล่านี้:
ที่บรรทัดคำสั่ง:
set NODE_ENV=production&&npm start
หรือ
set NODE_ENV=production&&node index.js
เคล็ดลับในการทำงานบน 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"
}
คุณสามารถใช้ได้
npm run env NODE_ENV=production
มันอาจเป็นวิธีที่ดีที่สุดในการทำเพราะมันเข้ากันได้กับทั้ง Windows และ Unix
จากเอกสารคู่มือรันสคริปต์ npm :
สคริปต์ env เป็นคำสั่งในตัวพิเศษที่สามารถใช้เพื่อแสดงรายการตัวแปรสภาพแวดล้อมที่พร้อมใช้งานสำหรับสคริปต์เมื่อรันไทม์ หากคำสั่ง "env" ถูกกำหนดไว้ในแพ็คเกจของคุณจะมีความสำคัญเหนือกว่าในตัว
npm run env NODE_ENV=production -- node -e 'console.log(process.env.NODE_ENV)'
--
node -e 'console.log(process.env.NODE_ENV)'
npm run env NODE_TLS_REJECT_UNAUTHORIZED=0 -- node --inspect ./etc/http-req-standalone.js
และ ... ไม่มีอะไรเกิดขึ้น ฉันไม่แน่ใจว่าวิธีนี้ใช้ได้กับ windows
หากคุณใช้ 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
ฉันเขียนโมดูลwin-node-envซึ่งคุณสามารถรันคำสั่งของคุณเหมือนกับที่คุณใช้ใน * nix
NODE_ENV=production node myapp/app.js
มันทำงานโดยการสร้างNODE_ENV.cmd
ชุดNODE_ENV
ตัวแปรสภาพแวดล้อมและวางกระบวนการลูกกับส่วนที่เหลือของคำสั่งและ args
เพียงแค่ติดตั้ง (ทั่วโลก) และเรียกใช้คำสั่งสคริปต์ npm ของคุณมันควรจะทำให้มันใช้งานได้โดยอัตโนมัติ
npm install -g win-node-env
ประสบการณ์ของฉันในการใช้ 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? เอ่อมาที่หน้าต่างมารวมกัน
นี่คือวิธีบรรทัดที่ไม่ใช่คำสั่ง:
ใน Windows 7 หรือ 10 ให้พิมพ์สภาพแวดล้อมลงในช่องค้นหาของเมนูเริ่มและเลือกแก้ไขตัวแปรสภาพแวดล้อมของระบบ
หรือไปที่แผงควบคุม \ ระบบและความปลอดภัย \ ระบบแล้วคลิกการตั้งค่าระบบขั้นสูง
สิ่งนี้ควรเปิดกล่องโต้ตอบคุณสมบัติของระบบโดยเลือกแท็บขั้นสูง ที่ด้านล่างคุณจะเห็นปุ่มตัวแปรสภาพแวดล้อม ... คลิกที่นี่
กล่องโต้ตอบตัวแปรสภาพแวดล้อมจะเปิดขึ้น
ที่ด้านล่างภายใต้ตัวแปรระบบให้เลือกใหม่ ... ซึ่งจะเปิดกล่องโต้ตอบตัวแปรระบบใหม่
ป้อนชื่อตัวแปรและค่าแล้วคลิกตกลง
คุณจะต้องปิดพรอมต์คำสั่งทั้งหมดและรีสตาร์ทเซิร์ฟเวอร์ของคุณเพื่อให้ตัวแปรใหม่พร้อมใช้งานสำหรับ process.env หากยังไม่ปรากฏขึ้นให้รีสตาร์ทเครื่อง
เพื่อชี้แจงและสำหรับคนอื่นที่อาจดึงผมออกมา ...
หากคุณกำลังใช้ทุบตีคอมไพล์บน Windows , ดูเหมือนจะไม่ทำงานset node_env=production&& node whatever.js
ให้ใช้คำสั่งดั้งเดิม จากนั้นใช้set node_env=production&& node whatever.js
งานตามที่คาดไว้
กรณีการใช้งานของฉัน:
ฉันพัฒนาบน Windows เนื่องจากเวิร์กโฟลว์ของฉันเร็วขึ้นมากแต่ฉันต้องตรวจสอบให้แน่ใจว่ามิดเดิลแวร์เฉพาะการพัฒนาแอปพลิเคชันของฉันไม่ทำงานในสภาพแวดล้อมการผลิต
วิธีเรียกใช้แอปพลิเคชันของคุณใน PowerShell (เนื่องจาก&&
ไม่ได้รับอนุญาต):
($env:NODE_ENV="production") -and (node myapp/app.js)
โปรดทราบว่าผลลัพธ์ข้อความของสิ่งที่เซิร์ฟเวอร์ทำถูกระงับและฉันไม่แน่ใจว่าสามารถแก้ไขได้หรือไม่ (ขยายคำตอบของ @ jsalonen)
"debug-windows": "($env:NODE_ENV=\"dev\") -and (node src/dequeue.js)"
ที่หนึ่งในประเภท PowerShell
$env:NODE_ENV="production"
จากนั้นพิมพ์
node fileName.js
มันจะทำงานอย่างสมบูรณ์แบบการแสดงผลทั้งหมด
สำหรับตัวแปรสภาพแวดล้อมหลายตัว.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
:
npm install --save dotenv-safe
ติดตั้งด้วยindex.js
) และใช้กับprocess.env
คำสั่งโดยตรง:require('dotenv').load()
console.log(process.env.DB_HOST)
อย่าลืมที่จะไม่สนใจ.env
ไฟล์ใน VCS
โปรแกรมของคุณจะทำงานล้มเหลวอย่างรวดเร็วหากตัวแปร "ที่กำหนด" ใน.env.example
ถูกยกเลิกการตั้งค่าไม่ว่าจะเป็นตัวแปรสภาพแวดล้อมหรือ.env
ระบบ
ในกรณีที่คุณใช้งานเทอร์มินัล GITBASH
"set NODE_ENV=production"
จะไม่ทำงานสิ่งที่คุณทำได้คือพิมพ์ "ส่งออก"NODE_ENV=production"
สิ่งนี้จะไม่ตั้งค่าตัวแปร แต่มีประโยชน์ในหลายกรณี ฉันจะไม่แนะนำให้ใช้สิ่งนี้ในการผลิต แต่มันก็โอเคถ้าคุณเล่นกับ npm
npm install --production
ฉันใช้สคริปต์ npm เพื่อใช้ในการทำงานโดยไม่มี "&&"
NODE_ENV = ทดสอบการทำงานของ npm run seed-db
รีสตาร์ทรหัส VS หาก NODE_ENV หรือตัวแปรสภาพแวดล้อมอื่นใดไม่ได้ให้ค่าที่ถูกต้อง สิ่งนี้จะทำงานหลังจากรีสตาร์ท