Kodokon kodokon.com

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

เขียนสคริปต์ที่รับอาร์กิวเมนต์ด้วย process.argv อ่านตัวแปรสภาพแวดล้อม และคืนรหัสออก

8 นาที · 3 คำถาม

เปิดบทเรียนนี้ใน Kodokon

คุณใช้โปรแกรมบนบรรทัดคำสั่งอยู่แล้ว เช่น node, npm, git และอื่น ๆ แต่ละตัวรับ อาร์กิวเมนต์ (argument) คำที่พิมพ์ต่อจากชื่อของมัน ซึ่งจะเปลี่ยนพฤติกรรมของมัน มาเขียนโปรแกรมของเราเองกัน Node เปิดเผยอ็อบเจกต์ส่วนกลาง process ที่อธิบายโปรแกรมที่กำลังทำงานอยู่ คุณเคยเจอมันมาแล้วกับ process.version คุณสมบัติ process.argv ของมันคืออาร์เรย์ที่บรรจุ ที่ดัชนี 0 คือพาธไปยัง Node ที่ดัชนี 1 คือพาธไปยังสคริปต์ของคุณ และตั้งแต่ดัชนี 2 เป็นต้นไปคืออาร์กิวเมนต์ที่ผู้ใช้พิมพ์เข้ามาจริง ๆ

JAVASCRIPT
console.log(process.argv);

const args = process.argv.slice(2);
console.log("Your arguments:", args);
บันทึกโค้ดนี้ใน args.js แล้วรัน node args.js apple pear โดย slice(2) จะแยกเอาเฉพาะอาร์กิวเมนต์ที่มีประโยชน์ออกมา

แหล่งข้อมูลที่สอง คือ ตัวแปรสภาพแวดล้อม (environment variable) เหล่านี้คือคู่ชื่อ/ค่า ที่ระบบมอบให้กับโปรแกรมในตอนเริ่มทำงาน มันใช้สำหรับการตั้งค่า เช่น คีย์ API ลับ โหมดดีบัก ที่อยู่ของฐานข้อมูล และอื่น ๆ คุณอ่านมันได้ในอ็อบเจกต์ process.env ตัวแปรที่ไม่มีอยู่จะเป็น undefined จงเตรียมค่าเริ่มต้นไว้เสมอ เช่น ด้วยตัวดำเนินการ ??

JAVASCRIPT
const level = process.env.LOG_LEVEL ?? "info";

console.log("Log level:", level);
บันทึกโค้ดนี้ใน config.js เมื่อไม่มีตัวแปรใดถูกกำหนดไว้ ระดับจะเป็น info
BASH
LOG_LEVEL=debug node config.js
บน macOS และ Linux คุณกำหนดตัวแปรไว้ก่อนหน้าคำสั่งได้ทันที สคริปต์จะพิมพ์ debug ออกมา

เมื่อโปรแกรมทำงานเสร็จ มันจะคืน รหัสออก (exit code) ให้กับระบบ ตัวเลขที่สรุปว่าทุกอย่างเป็นอย่างไร ธรรมเนียมสากลคือ 0 หมายถึง "สำเร็จ" ส่วนค่าอื่นใดบ่งบอกถึงข้อผิดพลาด นี่คือสิ่งที่เครื่องมือและสคริปต์อื่น ๆ ตรวจสอบเพื่อรู้ว่าทุกอย่างทำงานได้หรือไม่ process.exit(1) จะหยุดสคริปต์ทันทีด้วยรหัส 1 นอกจากนี้ให้ใช้ console.error สำหรับข้อความแสดงข้อผิดพลาด มันเขียนไปที่ เอาต์พุตข้อผิดพลาด (stderr) ช่องทางที่แยกจากเอาต์พุตปกติ มารวมทุกอย่างเข้าด้วยกันในสคริปต์ที่สมบูรณ์กัน

JAVASCRIPT
const name = process.argv[2];

if (!name) {
  console.error("Usage: node greet.js <name>");
  process.exit(1);
}

console.log(`Hello, ${name}!`);
เมื่อไม่มีอาร์กิวเมนต์ greet.js จะอธิบายวิธีใช้และออกด้วยรหัส 1 แต่เมื่อมีชื่อ มันจะทักทายและจบด้วยรหัส 0

ทดสอบความรู้

ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน

  1. ใน process.argv อาร์กิวเมนต์ตัวแรกที่ผู้ใช้พิมพ์อยู่ที่ใด?
    • ที่ดัชนี 0
    • ที่ดัชนี 2
    • ที่ดัชนี 1
    • ที่ดัชนีสุดท้ายเสมอ
  2. รหัสออกใดบ่งบอกว่าโปรแกรมทำงานเสร็จอย่างสำเร็จ?
    • 0
    • 1
    • 200
  3. คุณจะอ่านตัวแปรสภาพแวดล้อม API_KEY ในสคริปต์ Node ได้อย่างไร?
    • process.argv.API_KEY
    • env.get("API_KEY")
    • process.env.API_KEY