ข้อกำหนด JavaScript (ECMASCript) ไม่ได้กำหนดชุดไลบรารีมาตรฐานที่สมบูรณ์ซึ่งสามารถนำไปใช้กับโปรแกรมส่วนใหญ่ได้ CommonJS จัดเตรียมชุดข้อมูลจำเพาะของไลบรารีมาตรฐาน JavaScript โหนดใช้ข้อมูลจำเพาะ CommonJS
พื้นฐานของโมดูล
ในโหนดโมดูลและไฟล์สอดคล้องกันทีละตัว เรากำหนดโมดูล:
การคัดลอกรหัสมีดังนี้:
// circle.js
var pi = math.pi;
// พื้นที่ฟังก์ชันการส่งออก
exports.area = function (r) {
ส่งคืน pi * r * r;
-
// วงจรฟังก์ชั่นการส่งออก
exports.circumference = function (r) {
กลับ 2 * pi * r;
-
ที่นี่ฟังก์ชั่นที่ต้องส่งออกจะถูกเพิ่มเข้าไปในวัตถุส่งออก ตัวแปรท้องถิ่นของโมดูลไม่สามารถเข้าถึงได้จากภายนอก (ตัวอย่างเช่นตัวแปร PI ในตัวอย่างด้านบน) การโทรจำเป็นต้องโหลดโมดูลวงกลม js:
การคัดลอกรหัสมีดังนี้:
var circle = ต้องการ ('./ circle.js');
console.log ('พื้นที่ของวงกลมรัศมี 4 คือ'
+ circle.area (4));
ดังที่ได้กล่าวไว้ในโมดูลมีวัตถุโมดูลที่แสดงถึงโมดูลเองและการส่งออกเป็นแอตทริบิวต์ของโมดูล
การโหลดโมดูล
โหนดจะบัฟเฟอร์โมดูลโหลดเพื่อหลีกเลี่ยงค่าใช้จ่ายในการโหลดซ้ำ:
การคัดลอกรหัสมีดังนี้:
// test.js
console.log ("ฉันอยู่ที่นี่");
การโหลดโมดูลทดสอบ. js หลายครั้ง
การคัดลอกรหัสมีดังนี้:
// เฉพาะผลลัพธ์ "ฉันอยู่ที่นี่" หนึ่งครั้ง
ต้องการ ('./ test');
ต้องการ ('./ test');
เมื่อไฟล์โหลดไม่มีคำต่อท้ายโหนดพยายามเพิ่มคำต่อท้ายและโหลด:
1..JS (ไฟล์แหล่ง JavaScript)
2..Node (โมดูลส่วนขยาย C/C ++)
3..JSON (ไฟล์ JSON)
มีโมดูลหลักหลายประเภท:
1. โมดูลหลัก โมดูลหลักได้รวบรวมไว้ในโหนดและเราสามารถค้นหาโมดูลหลักเหล่านี้ในไดเรกทอรี LIB ในซอร์สโค้ด โมดูลหลักทั่วไป: NET, HTTP, โมดูล FS ฯลฯ
2. โมดูลไฟล์ โมดูลไฟล์ถูกโหลดผ่านเส้นทางสัมพัทธ์หรือแบบสัมบูรณ์เช่น circle.js ที่เราเห็นด้านบน
3. ปรับแต่งโมดูล โมดูลที่กำหนดเองอยู่ในไดเรกทอรี Node_Modules โมดูลต่างๆที่เราติดตั้งผ่าน NPM จะถูกวางไว้ในไดเรกทอรี Node_Modules
โมดูลหลักจะถูกโหลดก่อนเสมอ หากมีโมดูลที่กำหนดเอง HTTP แล้วโมดูลหลัก HTTP จะยังคงถูกโหลดแทนโมดูล HTTP ที่กำหนดเองเมื่อโหลด เมื่อโหลดโมดูลที่กำหนดเองก่อนอื่นให้ค้นหาไดเรกทอรี Node_Modules ในไดเรกทอรีปัจจุบันจากนั้นมองหาไดเรกทอรี Node_Modules ในไดเรกทอรีหลักและอื่น ๆ จนกระทั่งไดเรกทอรีรูท
ต้องการเมื่อโมดูลโหลดไม่ใช่ไฟล์ แต่เป็นไดเรกทอรีไดเรกทอรีดังกล่าวเรียกว่าแพ็คเกจ มีไฟล์ชื่อ package.json (ไฟล์คำอธิบายแพ็คเกจ) ในแพ็คเกจตัวอย่างเช่น:
การคัดลอกรหัสมีดังนี้:
{"NAME": "Some-Library",
"หลัก": "./lib/some-library.js"}
โดยที่หลักระบุโมดูลที่ต้องโหลด หาก package.json ไม่มีอยู่ในแพ็คเกจหรือ package.json ไม่ได้ระบุโมดูลหลักแล้วโหนดจะพยายามโหลด index.js, index.node, index.json
เมื่อโหลดโมดูล JavaScript โมดูลที่โหลดจะถูกห่อหุ้มในฟังก์ชัน:
การคัดลอกรหัสมีดังนี้:
ฟังก์ชั่น (โมดูล, การส่งออก, __filename, __dirname, ... ) {
โมดูล JavaScript
-
โมดูล, การส่งออก, __filename, __dirname ฯลฯ เข้าถึงได้โดยแต่ละโมดูล JavaScript จะถูกส่งผ่านผ่านพารามิเตอร์ฟังก์ชัน เนื่องจากแพ็คเกจประเภทนี้ตัวแปรท้องถิ่นของโมดูลไม่สามารถเข้าถึงได้ภายนอก แต่บางครั้งก็มีปัญหาที่ยากที่จะเข้าใจเช่น:
test1.js
การคัดลอกรหัสมีดังนี้:
การส่งออก = {
ชื่อ: 'name5566',
-
test2.js
การคัดลอกรหัสมีดังนี้:
module.exports = {
ชื่อ: 'name5566',
-
โหลดสองโมดูลนี้:
การคัดลอกรหัสมีดังนี้:
var test1 = ต้องการ ('./ test1.js');
console.log (test1.name); // ไม่ได้กำหนด
var test2 = ต้องการ ('./ test2.js');
console.log (test2.name); // name5566
การส่งออกจะถูกส่งผ่านเป็นพารามิเตอร์ไปยังโมดูล เราสามารถเพิ่มแอตทริบิวต์ (หรือวิธีการ) ตามธรรมชาติลงในวัตถุส่งออกผ่านทาง exports.x แต่การกำหนดค่าโดยตรงให้กับการส่งออก (ตัวอย่างเช่นการส่งออก = x) เพียงแค่เปลี่ยนค่าของพารามิเตอร์ที่เป็นทางการมากกว่าพารามิเตอร์จริงดังนั้น::
1. เมื่อเพิ่มคุณสมบัติในการส่งออกให้ใช้การส่งออก
2. เมื่อกำหนดค่าให้กับการส่งออกให้ใช้โมดูลส่งออก
ถุง
ตามข้อกำหนดของ CommonJS แพ็คเกจที่สมบูรณ์ควรรวมถึง:
1.Package.json แพ็คเกจคำอธิบายไฟล์
2. ไดเรกทอรีไฟล์ไบนารี
3. ไดเรกทอรีรหัส JavaScript
4. ไดเรกทอรีเอกสาร
5. ไดเรกทอรีรหัสทดสอบทดสอบ
NPM เป็นเครื่องมือจัดการแพ็คเกจสำหรับโหนด การใช้งานทั่วไป:
ดูเอกสารคำสั่ง:
การคัดลอกรหัสมีดังนี้:
การติดตั้ง Help NPM
ดูเอกสารประกอบสำหรับการติดตั้งคำสั่ง
ติดตั้งแพ็คเกจ:
การคัดลอกรหัสมีดังนี้:
NPM ติดตั้ง Redis
ติดตั้งแพ็คเกจ Redis คำสั่งติดตั้งติดตั้งแพ็คเกจในไดเรกทอรี Node_Modules ในไดเรกทอรีปัจจุบัน
ลบแพ็คเกจ:
การคัดลอกรหัสมีดังนี้:
npm ลบ redis
ลบแพ็คเกจ Redis คำสั่งลบจะลบแพ็คเกจในไดเรกทอรีปัจจุบัน