
สวัสดีครับ ในบทความนี้จะเกี่ยวกับ Peer dependencies ใน npm ครับ
ในบางครั้งถ้าเราต้องการจะสร้าง Library A และ Plugin B ที่ใช้งานร่วมกันตัวอย่างเช่น
import A from 'A';
import B from 'B';
A.addPlugin(new B());
A.doSomeThing();
จากตัวอย่างด้านบน หมายความว่า Plugin B จะต้อง Implement ให้สามารถใช้งานใน Library A ได้
ปัญหาคือ ถ้า Library A มีการเปลี่ยน version และมีการเปลี่ยนแปลงอะไรบางอย่างที่ทําให้ Plugin B ไม่สามารถใช้งานได้อีกต่อไป จึงทําให้เกิดปัญหาขึ้นมา
Peer dependencies จะมาช่วยแก้ปัญหานี้คือ จะช่วยบอก npm ว่า Plugin B จะสามารถใช้งานกับ Library A version อะไรได้บ้าง
ตัวอย่างการกําหนด peerDependencies ให้กับ Plugin B
{
"name": "B",
"version": "1.0.0",
"peerDependencies": {
"A": "2.x"
}
}
จากตัวอย่างด้านบน หมายความว่า Plugin B v1.0.0 จะสามารถใช้งานร่วมกับ Library A v2.x ได้ แต่ใน Library A version อื่นๆนอกเหนือจากนี้ อาจจะไม่สามารถทํางานร่วมกันได้
ใน npm version 3-6 จะขึ้น Warning กรณีที่ version ของ package ใน peerDependencies ไม่ตรงกันกับ package ที่อยู่ใน node_module
แต่ ใน npm version 7 จะทําการ Install package ใน peerDependencies ให้โดยอัตโนมัติ ทําให้เกิด Conflic และ Error ขึ้นกรณีที่ ใน node_module มี package version อื่น อยู่แล้ว ซึ่งเราสามารถแก้ปัญหาได้โดยใช้ —legacy-peer-deps ตอนใช้คําสั่ง npm install เพื่อบอก npm ว่าไม่ต้อง Install ให้ แค่แสดง Warning ขึ้นมาเฉยๆพอ เหมือนกับ npm version 3-6
$ npm install --legacy-peer-deps <your package>โดยทั่วไปถ้าเราต้องการจะดูว่ามีไฟล์อะไรอยู่ใน path ปัจจุบันบ้างเราก็จะใช้คําสั่ง ls
nano เป็นคําสั่งที่ใช้แก้ไข Text File คล้ายๆกับ notepad ใน Windows รูปแบบการใช้งานก็มีดังนี้nano [FILE]...[FILE]... คือ ชื่อของ Text file ที่ต้องการจะ แก้ไข(ถ้าไฟล์นั้นมีอยู่แล้ว จะเปิดไฟล์นั้นขึ้นมาแก้ไข แต่ถ้าไม่พบไฟล์ จะสร้างไฟล์ขึ้นมาใหม่)Imageคําสั่ง nano พื้นฐานบันทึกไฟล์ Cltr + Oการ Copy ข้อความทั้งบรรทัด Alt + ^การ Cut ข้อความทั้งบรรทัด Cltr + Kการ Paste บรรทัดที่ Copy มา Cltr + Uการค้นหาคำ Cltr + Wการค้นหาคำ Alt + Wการเลือกข้อความ Cltr + Shift + 6 แล้ว เลื่อน Cursor ไปซ้ายขวาจนได้เนื้อหาที่ต้อการการ Copy ข้อความที่เลือก Alt + Shift + 6การ Cut ข้อความที่เลือก Cltr + Kออกจากโปรแกรม Cltr + x
IDN หรือเรียกเต็มๆว่า Internationalized Domain Name คือ ชื่อโดเมนที่สามารถประกอบด้วยอักขระ (character) อื่น ๆ ที่นอกเหนือไปจากรหัส ASCII ได้ ซึ่งเดิมทีการตั้งชื่อโดเมนจะถูกจำกัดอยู่เพียงแค่การใช้ตัวอักษรภาษาอังกฤษ (อักษรโรมัน) A-Z, ตัวเลขอารบิก 0-9 และเครื่องหมายยัติภังค์ (-) เท่านั้น เนื่องจากข้อจำกัดของระบบชื่อโดเมน (domain name system - DNS) ที่ใช้อยู่แต่เดิม