เรียกใช้สคริปต์ที่ตั้งค่าและใช้ตัวแปรสภาพแวดล้อมข้ามแพลตฟอร์ม
ข้อสังเกต: Cross-ENV ยังคงทำงานได้ดี แต่อยู่ในโหมดการบำรุงรักษา จะไม่มีการเพิ่มคุณสมบัติใหม่จะมีเพียงข้อบกพร่องที่ร้ายแรงและเป็นกรณีทั่วไปเท่านั้นที่จะได้รับการแก้ไขและจะได้รับการปรับปรุงให้ทันสมัยด้วย node.js เมื่อเวลาผ่านไป เรียนรู้เพิ่มเติม
คำสั่ง windows ส่วนใหญ่จะทำให้หายใจไม่ออกเมื่อคุณตั้งค่าตัวแปรสภาพแวดล้อมด้วย NODE_ENV=production เช่นนั้น (ข้อยกเว้นคือ Bash on Windows ซึ่งใช้ Native Bash) ในทำนองเดียวกันมีความแตกต่างในวิธีการที่คำสั่ง Windows และ Posix ใช้ตัวแปรสภาพแวดล้อม ด้วย Posix คุณใช้: $ENV_VAR และบน Windows คุณใช้ %ENV_VAR%
cross-env ทำให้คุณสามารถมีคำสั่งเดียวโดยไม่ต้องกังวลเกี่ยวกับการตั้งค่าหรือใช้ตัวแปรสภาพแวดล้อมอย่างเหมาะสมสำหรับแพลตฟอร์ม เพียงแค่ตั้งค่าให้เหมือนที่คุณต้องการถ้ามันทำงานบนระบบ POSIX และ cross-env จะดูแลการตั้งค่าอย่างถูกต้อง
cross-env vs cross-env-shell โมดูลนี้มีการกระจายผ่าน NPM ซึ่งรวมกับโหนดและควรติดตั้งเป็นหนึ่งใน devDependencies ของโครงการของคุณ:
npm install --save-dev cross-env
คำเตือน! ตรวจสอบให้แน่ใจว่าเมื่อคุณติดตั้งแพ็คเกจที่คุณสะกดอย่างถูกต้องเพื่อหลีกเลี่ยงการติดตั้งมัลแวร์โดยไม่ตั้งใจ
หมายเหตุ: เวอร์ชัน 7 ของ Cross-ENV รองรับ Node.js 10 และสูงกว่าเท่านั้นเพื่อใช้บน node.js 8 หรือต่ำกว่าการติดตั้งรุ่น 6
npm install --save-dev cross-env@6
ฉันใช้สิ่งนี้ในสคริปต์ NPM ของฉัน:
{
"scripts" : {
"build" : " cross-env NODE_ENV=production webpack --config build/webpack.config.js "
}
} ในที่สุดคำสั่งที่ดำเนินการ (โดยใช้ cross-spawn ) คือ:
webpack --config build/webpack.config.js
ตัวแปรสภาพแวดล้อม NODE_ENV จะถูกตั้งค่าโดย cross-env
คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมหลายตัวในแต่ละครั้ง:
{
"scripts" : {
"build" : " cross-env FIRST_ENV=one SECOND_ENV=two node ./my-program "
}
}นอกจากนี้คุณยังสามารถแยกคำสั่งออกเป็นหลาย ๆ คำหรือแยกการประกาศตัวแปรสภาพแวดล้อมออกจากการดำเนินการคำสั่งจริง คุณสามารถทำได้ด้วยวิธีนี้:
{
"scripts" : {
"parentScript" : " cross-env GREET= " Joe " npm run childScript " ,
"childScript" : " cross-env-shell " echo Hello $GREET " "
}
} ในกรณีที่ childScript ถือคำสั่งจริงเพื่อดำเนินการและ parentScript จะตั้งค่าตัวแปรสภาพแวดล้อมให้ใช้ จากนั้นแทนที่จะเรียกใช้ childscript คุณเรียกใช้พาเรนต์ สิ่งนี้ค่อนข้างมีประโยชน์สำหรับการเรียกใช้คำสั่งเดียวกันกับตัวแปร Env ที่แตกต่างกันหรือเมื่อตัวแปรสภาพแวดล้อมยาวเกินไปที่จะมีทุกอย่างในบรรทัดเดียว นอกจากนี้ยังหมายความว่าคุณสามารถใช้ไวยากรณ์ $GREET env var แม้บนหน้าต่างซึ่งมักจะต้องเป็น %GREET%
หากคุณนำหน้าเครื่องหมายดอลลาร์ด้วยจำนวนคี่ของแบ็คสแลชแถลงนิพจน์จะไม่ถูกแทนที่ โปรดทราบว่านี่หมายถึงแบ็คสแลชหลังจากการหลบหนีของ JSON เกิดขึ้น "FOO=\$BAR" จะไม่ถูกแทนที่ "FOO=\\$BAR" จะถูกแทนที่แม้ว่า
สุดท้ายหากคุณต้องการผ่านสตริง JSON (เช่นเมื่อใช้ TS-Loader) คุณสามารถทำได้ดังนี้:
{
"scripts" : {
"test" : " cross-env TS_NODE_COMPILER_OPTIONS={ \" module \" : \" commonjs \" } node some_file.test.ts "
}
} ให้ความสนใจเป็นพิเศษกับ ทริปเปิ้ลแบ็คสแลช (\) ก่อน คำพูดสองครั้ง (") และ ไม่มี คำพูดเดียว (') เงื่อนไขทั้งสองนี้จะต้องปฏิบัติตามเพื่อทำงานทั้งบน Windows และ UNIX
cross-env vs cross-env-shell โมดูล cross-env เปิดเผยสองถัง: cross-env และ cross-env-shell คำสั่งแรกดำเนินการคำสั่งโดยใช้ cross-spawn ในขณะที่อันที่สองใช้ตัวเลือก shell จาก spawn ของ Node
กรณีการใช้งานหลักสำหรับ cross-env-shell คือเมื่อคุณต้องการตัวแปรสภาพแวดล้อมที่จะตั้งค่าข้ามสคริปต์เชลล์อินไลน์ทั้งหมดแทนที่จะเป็นเพียงคำสั่งเดียว
ตัวอย่างเช่นหากคุณต้องการให้ตัวแปรสภาพแวดล้อมใช้กับหลาย ๆ คำสั่งในซีรีส์คุณจะต้องห่อสิ่งเหล่านั้นในราคาและใช้ cross-env-shell แทน cross-env
{
"scripts" : {
"greet" : " cross-env-shell GREETING=Hi NAME=Joe " echo $GREETING && echo $NAME " "
}
} กฎของหัวแม่มือคือ: หากคุณต้องการส่งผ่านไปยังคำสั่ง cross-env ที่มีอักขระเชลล์พิเศษ ที่คุณต้องการตีความ ให้ใช้ cross-env-shell มิฉะนั้นติดกับ cross-env
บน Windows คุณต้องใช้ cross-env-shell หากคุณต้องการจัดการเหตุการณ์สัญญาณภายในโปรแกรมของคุณ กรณีทั่วไปคือเมื่อคุณต้องการจับเหตุการณ์ SIGINT ที่เรียกใช้โดยกด Ctrl + C บนอินเทอร์เฟซบรรทัดคำสั่ง
โปรดทราบว่า npm ใช้ cmd โดยค่าเริ่มต้นและไม่รองรับการทดแทนคำสั่งดังนั้นหากคุณต้องการใช้ประโยชน์จากนั้นคุณต้องอัปเดต .npmrc ของคุณเพื่อตั้งค่า script-shell เป็น PowerShell เรียนรู้เพิ่มเติมที่นี่
ตอนแรกฉันสร้างสิ่งนี้เพื่อแก้ปัญหาที่ฉันมีกับสคริปต์ NPM ของฉันในรูปแบบเชิงมุม สิ่งนี้ทำให้โครงการนี้มีส่วนทำให้ผู้ใช้ Windows ง่ายขึ้นมาก
env-cmd - อ่านตัวแปรสภาพแวดล้อมจากไฟล์แทน@naholyr/cross-env - cross-env พร้อมการสนับสนุนสำหรับการตั้งค่าค่าเริ่มต้น ต้องการมีส่วนร่วม? มองหาฉลากฉบับแรกที่ดี
โปรดยื่นปัญหาสำหรับข้อบกพร่องเอกสารที่ขาดหายไปหรือพฤติกรรมที่ไม่คาดคิด
ดูข้อบกพร่อง
โครงการนี้อยู่ในโหมดการบำรุงรักษาและจะไม่มีการพิจารณาคำขอคุณสมบัติใหม่
เรียนรู้เพิ่มเติม
ขอบคุณไปกับคนเหล่านี้ (คีย์อีโมจิ):
Kent C. Dodds - | ยาจู่ - | เจมส์แฮร์ริส | Compumike08 - | Daniel Rodríguez Rivero - | Jonas Keinholz - | ไม้ฮูโก้ - |
Thiebaud Thomas - | Daniel Rey López | Amila Welihinda - | Paul Betts - | เทอร์เนอร์เฮย์ส - | Suhas Karanth | สเวน |
D. Nicolás Lopez Zelaya | Johan Hernandez | Jordan Nielson - | Jason Cooke | Bibo5088 | Eric Berry - | Michaël de Boey |
Lauri Eskola | Devuxer | แดเนียล |
โครงการนี้เป็นไปตามข้อกำหนดทั้งหมดของผู้เข้าร่วม การมีส่วนร่วมทุกชนิดยินดีต้อนรับ!
หมายเหตุ: สิ่งนี้ถูกเพิ่มเข้ามาในโครงการ หากคุณมีส่วนร่วมในโครงการนี้ในทางใดทางหนึ่งโปรดทำการร้องขอการดึงเพื่อเพิ่มตัวคุณเองในรายการโดยทำตามคำแนะนำใน
CONTRIBUTING.md
มิกซ์