การระบุโมดูล SEAJS GitHub ค่อนข้างชัดเจน แต่มันไม่ได้ครอบคลุมในทุกสิ่งโดยเฉพาะอย่างยิ่งเมื่อคุณต้องการเขียนด้วยมือ [โมดูล ID] และ [การพึ่งพาโมดูล] หรือเมื่อคุณเขียนเครื่องมืออัตโนมัติของคุณเองเพื่อขนส่ง (PS: SPM ดูเหมือนจะไม่สามารถปรับได้ การใช้งานทุกโครงสร้างไดเรกทอรีของโครงการอาจแตกต่างกันอย่างมากและไม่ง่ายที่จะเปลี่ยนแปลง และกฎการแยกวิเคราะห์ ID จำเป็นต้องเข้าใจอย่างถ่องแท้
หมายเหตุ:
1. ตัวระบุระดับบนสุดจะแยกวิเคราะห์ได้เสมอเมื่อเทียบกับเส้นทางพื้นฐานพื้นฐาน
2. เส้นทางสัมบูรณ์และเส้นทางรูทจะถูกแยกวิเคราะห์เมื่อเทียบกับหน้าปัจจุบัน
3. เส้นทางสัมพัทธ์ในความต้องการและจำเป็นต้องมีการแยกวิเคราะห์สัมพันธ์กับเส้นทางโมดูลปัจจุบัน
4. เส้นทางสัมพัทธ์ใน SEAJS. การใช้งานมักจะแยกวิเคราะห์เมื่อเทียบกับหน้าปัจจุบัน
ใน SEAJS รหัสโมดูลสามารถแบ่งออกเป็นสามประเภท: [ตัวระบุสัมพัทธ์], [ตัวระบุระดับบนสุด] และ [เส้นทางปกติ]
เส้นทางธรรมดารวมถึง "เส้นทางสัมบูรณ์", "เส้นทางรูท" ฯลฯ
ที่นี่เรามุ่งเน้นไปที่ [โลโก้สัมพัทธ์] และ [โลโก้ด้านบน]
ตัวระบุสัมพัทธ์อ้างถึง "./", "../" เช่น: "./othermodule", "../lib/base"
ตัวระบุระดับสูงสุดอ้างถึงไฟล์หรือไดเรกทอรี (สามารถมี: ตัวอักษร, -, _) เช่น: "แอพ/วิดเจ็ต/เลือก"
มีสามสถานที่ที่จำเป็นต้องใช้รหัสโมดูล:
การคัดลอกรหัสมีดังนี้: กำหนด ("id (1)", ["../ id2 (2)"], ฟังก์ชั่น (ต้องการ, การส่งออก, โมดูล) {
var modulea = ต้องการ ('./ modulea (3)');
-
หมายเหตุ: ไม่ว่าจะเป็นพารามิเตอร์แรก [โมดูล ID] หรือพารามิเตอร์ที่สอง [โมดูล ID] หรือ [รหัสโมดูลที่เชื่อถือได้] มาตรฐานการเปรียบเทียบขั้นสุดท้ายคือ [parsed file uri]
ดังนั้นสถานที่ทั้งสามนี้ที่จำเป็นต้องเขียน IDs สามารถเขียนได้ในทางใดทางหนึ่งและตราบใดที่พวกเขาถูกแยกวิเคราะห์ใน URI เดียวกันในที่สุดพวกเขาก็ถือว่าเป็นโมดูลเดียวกัน
ในระหว่างกระบวนการแยกวิเคราะห์ ID มันจะถูกประมวลผลล่วงหน้าโดยนามแฝงและเส้นทางที่กำหนดไว้ใน Seajs.config
กฎการแก้ไขเส้นทางฐาน
(เลเยอร์ 1 เส้นทางนั้นไม่ได้ขึ้นอยู่กับการตั้งค่าใด ๆ )
1. [การระบุระดับบนสุด] ไม่สามารถใช้ได้เนื่องจากการระบุระดับบนสุดจะแยกวิเคราะห์เทียบกับเส้นทางพื้นฐานพื้นฐานดังนั้นฐานตัวเองสามารถใช้ [การระบุสัมพัทธ์] หรือ [เส้นทางรูท] ฯลฯ
2. เส้นทางเริ่มต้นของฐานคือไดเรกทอรี SEAJS
3. [การระบุสัมพัทธ์]: วิเคราะห์ความสัมพันธ์กับหน้าปัจจุบัน
กฎการแก้ไขเส้นทางในเส้นทาง
(เลเยอร์ 1 เส้นทางนั้นไม่ได้ขึ้นอยู่กับการตั้งค่าใด ๆ )
1. [การระบุสัมพัทธ์]: สถานที่ที่จะอ้างถึงตำแหน่งการวิเคราะห์สัมพัทธ์ขึ้นอยู่กับสถานที่ที่ถูกอ้างถึงและปฏิบัติตามกฎท้องถิ่น
2. ฟิลด์ในเส้นทางจะถูกแทนที่ในรูปแบบของตัวแปรที่ใช้แล้วแยกวิเคราะห์
ตัวอย่างเช่น:
คัดลอกรหัสดังต่อไปนี้: // รหัสบล็อก (1)
// คำจำกัดความเส้นทาง:
Seajs.config ({
ฐาน: "./ แอพ/src"
เส้นทาง:{
"A": "../ lib", // (1) เส้นทางสัมพัทธ์
"lib": "path/to/lib", // (2) โลโก้ระดับบนสุด
"L2": "/lib" // (3) เส้นทางรูท
-
-
// โมดูล mod/m/m.js:
-
ต้องการ ("A/jQuery");
// => แปลงเป็น: "../../lib/jquery"
// => การโหลด: mod/lib/jQuery (หมายเหตุพิเศษ 1)
-
// โมดูล mod/f.js:
-
ต้องการ ("A/jQuery");
// => แปลงเป็น: "../../lib/jquery"
// => โหลด: lib/jQuery (หมายเหตุพิเศษ 2)
-
กฎการแก้ไขเส้นทางในนามแฝง
(ในเลเยอร์ 2 เส้นทางเองสามารถขึ้นอยู่กับการตั้งค่าเส้นทาง)
1. กฎของนามแฝงคล้ายกับเส้นทางและเส้นทางนามแฝงยังสามารถใช้ "ตัวแปร" ในเส้นทาง
2. การเตือนความจำ: พยายามใช้ [การระบุระดับบนสุด], [เส้นทางรูท] และ [เส้นทางสัมบูรณ์] ในเส้นทางและนามแฝงและอย่าใช้ [การระบุสัมพัทธ์] เนื่องจากโมดูลของความลึกที่แตกต่างกันจะถูกแยกวิเคราะห์เป็นเส้นทางที่แตกต่างกัน
3. [การระบุสัมพัทธ์]: สถานที่ที่จะอ้างถึงตำแหน่งการวิเคราะห์สัมพัทธ์ขึ้นอยู่กับสถานที่ที่ถูกอ้างถึงและปฏิบัติตามกฎท้องถิ่น
Seajs. ใช้กฎการแก้ปัญหาเส้นทาง
[การระบุสัมพัทธ์]: วิเคราะห์ความสัมพันธ์กับหน้าปัจจุบัน
กำหนดกฎการแยกโมดูลรหัสการแยกวิเคราะห์ (1)
(ในเลเยอร์ 3 เส้นทางสามารถตั้งค่าสัมพันธ์กับนามแฝงหรือเส้นทาง)
คุณสามารถใช้: [การระบุสัมพัทธ์], [การระบุระดับบนสุด], [เส้นทางรูท]
ขอแนะนำให้ใช้ [การระบุระดับบนสุด]
【การระบุสัมพัทธ์】: การวิเคราะห์ที่สัมพันธ์กับหน้าปัจจุบัน
คัดลอกรหัสดังนี้: // รหัสบล็อก (2)
// config - ยังใช้การกำหนดค่าใน [code block (1)]
// โมดูล 1, ไม่มีความคลุมเครือ, การวิเคราะห์เส้นทางรูท
กำหนด ("/app/src/module/base", .. );
// โมดูล 2, ไม่คลุมเครือ, การระบุระดับบนสุด, แยกวิเคราะห์สัมพันธ์กับเส้นทางพื้นฐานพื้นฐาน
กำหนด ("App/src/module/base", .. );
// โมดูล 3 ที่มีความกำกวมและการระบุสัมพัทธ์ที่นี่สัมพันธ์กับหน้าปัจจุบัน (ดูหน้า HTML ของโมดูลนี้)
// แต่ถึงแม้ว่า [sutficially เป็น "id" เดียวกัน] จะใช้ที่อื่นโมดูลที่แตกต่างกันอาจถูกแยกวิเคราะห์
กำหนด ("./ แอพ/src/โมดูล/ฐาน", .. );
กฎการแก้ไขรหัสการพึ่งพาโมดูล (2)
(ในเลเยอร์ 3 เส้นทางสามารถตั้งค่าสัมพันธ์กับนามแฝงหรือเส้นทาง)
【การระบุสัมพัทธ์】: การวิเคราะห์เส้นทางพื้นฐานพื้นฐานสัมพัทธ์
คัดลอกรหัสดังนี้: // รหัสบล็อก (3)
// config - ยังใช้การกำหนดค่าใน [code block (1)]
// ไม่มีความกำกวมเทียบกับความละเอียดของเส้นทางรูท
กำหนด (".. ", ["/app/src/module/base"], .. )
// ไม่มีความคลุมเครือการระบุระดับบนสุดเทียบกับการวิเคราะห์เส้นทางพื้นฐานพื้นฐาน
กำหนด (".. ", ["แอป/src/โมดูล/ฐาน"], .. )
// มีความกำกวมเทียบกับโมดูลปัจจุบัน
// การพึ่งพาที่นี่ดูเหมือนว่าจะขึ้นอยู่กับ `โมดูล 3` ใน [บล็อกรหัส (2)]
// แต่ถ้าโมดูลปัจจุบันและหน้าปัจจุบันไม่อยู่ในไดเรกทอรีระดับเดียวกันมันจะไม่ถูกแยกวิเคราะห์เป็น `โมดูล 3 '
กำหนด (".. ", ["./app/src/module/base"], .. )
ต้องการกฎความละเอียด ID สำหรับโมดูลอื่น ๆ ภายในโมดูล (3)
(ในเลเยอร์ 3 เส้นทางสามารถตั้งค่าสัมพันธ์กับนามแฝงหรือเส้นทาง)
【การระบุสัมพัทธ์】: การวิเคราะห์เส้นทางพื้นฐานพื้นฐานสัมพัทธ์
คัดลอกรหัสดังนี้: // รหัสบล็อก (4)
// config - ยังใช้การกำหนดค่าใน [code block (1)]
กำหนด (".. ", [.. ], ฟังก์ชั่น (ต้องการ) {
// ไม่มีความกำกวมเทียบกับความละเอียดของเส้นทางรูท
ต้องการ ("/App/src/module/base");
-
กำหนด (".. ", [.. ], ฟังก์ชั่น (ต้องการ) {
// ไม่มีความคลุมเครือการระบุระดับบนสุดเทียบกับการวิเคราะห์เส้นทางพื้นฐานพื้นฐาน
ต้องการ ("App/src/module/base");
-
กำหนด (".. ", [.. ], ฟังก์ชั่น (ต้องการ) {
// มีความกำกวมเทียบกับโมดูลปัจจุบัน
// การพึ่งพาที่นี่ดูเหมือนว่าจะขึ้นอยู่กับ `โมดูล 3` ใน [บล็อกรหัส (2)]
// แต่ถ้าโมดูลปัจจุบันและหน้าปัจจุบันไม่อยู่ในไดเรกทอรีระดับเดียวกันมันจะไม่ถูกแยกวิเคราะห์เป็น `โมดูล 3 '
ต้องการ ("./ แอพ/src/โมดูล/ฐาน");
-
การเตือนความจำพิเศษ: มีสามแห่งในโมดูลที่จำเป็นต้องเขียน ID และไม่จำเป็นต้องใช้สตริงเดียวกันตราบใดที่มันถูกแยกวิเคราะห์ลงในโมดูลเดียวกัน
สรุป:
1. การตั้งค่าของเส้นทางและนามแฝงนั้นเทียบเท่ากับตัวแปรเท่านั้น
2. ใช้ [โลโก้ระดับบนสุด] ให้มากที่สุด
3. หากคุณไม่สามารถใช้ [ตัวระบุระดับบนสุด] เช่นช่วงไดเรกทอรีมีขนาดค่อนข้างใหญ่ลองตั้งค่านามแฝงหรือเส้นทางเพื่อค้นหาไดเรกทอรีผ่านตัวระบุ [เส้นทางที่ไม่ใช่ความสัมพันธ์] แล้วกำหนด ID ภายใต้ ตัวระบุนี้