เรียนรู้การสร้างออบเจ็กต์ config ใน package.json เพื่อแชร์ค่าพารามิเตอร์ใน scripts
เมื่อส่วนของ scripts ใน package.json มีความซับซ้อนมากขึ้นอันเกิดจากการแชร์ค่าพารามิเตอร์ร่วมกัน เช่น ค่าของพอร์ต นั่นทำให้ส่วนของ scripts มีส่วนซ้ำกันและต้องไล่แก้ไขทุกจุดเมื่อพารามิเตอร์เหล่านั้นเปลี่ยนแปลง
1{2 "name": "npm-config",3 "scripts": {4 "start": "node index.js -p 8080",5 "test": "wait-on http://localhost:8080 && jest"6 }7}
จากตัวอย่างข้างต้น 8080 เป็นค่าของพอร์ตที่ถูกใช้ซ้ำทั้งจากสคริปต์ของ start และ test เมื่อเป็นเช่นนี้การแยก 8080 ออกมาตั้งเป็นค่าพารามิเตอร์แยกย่อมดีกว่า เพราะจะช่วยลดโค้ดที่ซ้ำและง่ายต่อการแก้ไขค่านี้ในอนาคต
package.json มีส่วนของออบเจ็กต์ config ที่สามารถตั้งค่า configuration parameters เพื่อนำค่านี้ไปใช้กับส่วนของ scripts ได้ จากตัวอย่างตั้งต้นเราจึงย้าย 8080 ออกเป็นค่า config ในชื่อของ port ดังนี้
1{2 "name": "npm-config",3 "config": {4 "port": 80805 },6 "scripts": {7 "start": "node index.js -p $npm_package_config_port",8 "test": "wait-on http://localhost:$npm_package_config_port && jest"9 }10}
ส่วนของพารามิเตอร์สามารถถูกเข้าถึงได้ผ่านตัวแปรชื่อ $npm_package_config_<CONFIG>
เช่นกรณีของ port ข้างต้น
ตัวแปรที่เกิดขึ้นจึงเป็น $npm_package_config_port
นอกเหนือจากค่าพารามิเตอร์จะถูกอ้างอิงได้ใน scripts แล้ว มันยังสามารถถูกเข้าถึงได้จากในโค้ดด้วยเช่นกันผ่าน
process.env.npm_package_config_<CONFIG>
เช่น เราอาจสร้างไฟล์ index.js ดังนี้
1console.log(process.env.npm_package_config_port);
เมื่อทำการสั่ง npm start
จะได้ผลลัพธ์เป็น 8080 อันเป็นค่าของ port ในออบเจ็กต์ config นั่นเอง