การทำความเข้าใจการกำหนดเวอร์ชันแพ็คเกจในการพัฒนาซอฟต์แวร์: ความแตกต่างระหว่าง ^, ~ และไม่มีสัญลักษณ์

การแนะนำ

เมื่อพัฒนาซอฟต์แวร์ เป็นเรื่องปกติที่จะใช้ไลบรารีหรือโมดูลภายนอกที่เขียนโดยนักพัฒนารายอื่นเพื่อหลีกเลี่ยงการเขียนโค้ดตั้งแต่เริ่มต้น ไลบรารีหรือโมดูลภายนอกเหล่านี้เรียกว่าแพ็คเกจ

หากโปรเจ็กต์ของคุณใช้แพ็คเกจจากบริษัทอื่น คุณต้องระบุเวอร์ชันของแพ็คเกจ นี่เป็นสิ่งสำคัญเนื่องจากเวอร์ชันที่แตกต่างกันของแพ็คเกจเดียวกันอาจมีฟีเจอร์ การแก้ไขข้อบกพร่อง และอาจมีการเปลี่ยนแปลงเกมที่แตกต่างกัน

ระบบการจัดการแพ็คเกจใช้สัญลักษณ์ที่แตกต่างกันเพื่อระบุการขึ้นต่อกันของเวอร์ชัน สัญลักษณ์ที่พบบ่อยที่สุดคือ ^ (คาเร็ต) และ ~ (tilde) หรือไม่มีการใช้สัญลักษณ์เลย ในบทช่วยสอนนี้ เราจะอธิบายตัวเลือกต่างๆ และดูความแตกต่างระหว่างตัวเลือกเหล่านั้น

ส่วนการกำหนดเวอร์ชัน

โดยทั่วไปหมายเลขเวอร์ชันจะประกอบด้วยสองหรือสามส่วนที่คั่นด้วยจุด เช่น 1.2.3 หรือ 1.2.3.4 แต่ละส่วนของหมายเลขเวอร์ชันแสดงถึงระดับการเปลี่ยนแปลงของซอฟต์แวร์ที่แตกต่างกัน

วิชาเอก

เวอร์ชันหลักคือส่วนแรกของหมายเลขเวอร์ชัน แสดงถึงการเปลี่ยนแปลงที่สำคัญในซอฟต์แวร์ เช่น การเปลี่ยนแปลง API หรือการเปลี่ยนแปลงอินเทอร์เฟซที่อาจทำให้เกิดปัญหาความเข้ากันได้กับซอฟต์แวร์เวอร์ชันเก่า

ส่วนน้อย

เวอร์ชันรองคือส่วนที่สองของหมายเลขเวอร์ชัน นี่แสดงถึงการเปลี่ยนแปลงเล็กๆ น้อยๆ แต่สำคัญในซอฟต์แวร์ เช่น คุณสมบัติใหม่ การแก้ไขจุดบกพร่อง และการปรับปรุงอื่นๆ ที่ไม่ส่งผลต่อความเข้ากันได้แบบย้อนหลัง

ปะ

แพทช์เป็นส่วนที่สามของหมายเลขเวอร์ชัน แสดงถึงการเปลี่ยนแปลงซอฟต์แวร์เล็กๆ น้อยๆ รวมถึงการแก้ไขจุดบกพร่อง แพตช์ความปลอดภัย และการอัปเดตเล็กๆ น้อยๆ อื่นๆ ที่ไม่ส่งผลต่อฟังก์ชันการทำงานหรือความเข้ากันได้

เวอร์ชันบิวด์/หมายเลขการแก้ไข

เวอร์ชันบิวด์หรือหมายเลขการแก้ไขคือข้อมูลเพิ่มเติมที่ซอฟต์แวร์บางตัวใช้ หมายเลขเวอร์ชันส่วนนี้แสดงถึงรุ่นหรือรุ่นเฉพาะของซอฟต์แวร์ และโดยทั่วไปจะใช้เพื่อวัตถุประสงค์ในการติดตามภายในเท่านั้น

สัญลักษณ์คาเร็ต (^)

สัญลักษณ์รูปหมวก (^) บ่งชี้ว่าการอัปเดตของแพ็คเกจนั้นได้รับอนุญาต ตราบใดที่ไม่ใช่การอัปเดตหลักที่ทำให้ความเข้ากันได้แบบย้อนหลังลดลง

ตัวอย่างเช่น หากคุณมีการขึ้นต่อกันของแพ็คเกจด้วยเวอร์ชัน ^1.2.3 จะอนุญาตให้อัปเดตเป็นเวอร์ชัน 2.0.0 (ถ้ามี) แต่ไม่ใช่ 3.0.0 โดยสมมติว่าเวอร์ชัน 2.0.0 นั้นเข้ากันได้กับเวอร์ชัน 1.2 แบบย้อนหลัง 3.

สมมติว่าโปรเจ็กต์ของคุณขึ้นอยู่กับแพ็คเกจ 'lodash' และคุณต้องการอนุญาตให้อัปเดตจนกว่าจะถึงรีลีสหลักถัดไป แต่ไม่ใช่หลังจากนั้น คุณสามารถระบุการขึ้นต่อกันดังต่อไปนี้:

"dependencies": {
"lodash": "⁴.17.11"
}

ด้วยข้อกำหนดการขึ้นต่อกันนี้ คุณจะอนุญาตให้อัปเดตเป็นเวอร์ชัน 5.0.0 (ถ้ามี) แต่ไม่ใช่ 6.0.0 โดยถือว่าเวอร์ชัน 5.0.0 เข้ากันได้กับเวอร์ชัน 4.17.11 แบบย้อนหลัง

สัญลักษณ์ตัวหนอน (~)

สัญลักษณ์เครื่องหมายตัวหนอน (~) ระบุว่าคุณต้องการอนุญาตการอัปเดตแพ็คเกจตราบใดที่ยังอยู่ในเวอร์ชันรองเดียวกัน ตัวอย่างเช่น หากคุณมีการขึ้นต่อกันของแพ็คเกจด้วยเวอร์ชัน ~1.2.3 หมายความว่าคุณอนุญาตให้อัปเดตเป็นเวอร์ชัน 1.3.0 แต่ไม่ใช่ 2.0.0

สมมติว่าโปรเจ็กต์ของคุณขึ้นอยู่กับแพ็คเกจ “axios” และคุณต้องการอนุญาตให้อัปเดตจนถึงรุ่นรองถัดไป แต่ไม่ใช่รุ่นหลังจากนั้น คุณสามารถระบุการขึ้นต่อกันดังต่อไปนี้:

"dependencies": {
"axios": "~0.21.1"
}

ด้วยข้อกำหนดการขึ้นต่อกันนี้ คุณจะอนุญาตให้อัปเดตเป็นเวอร์ชัน 0.22.0 (ถ้ามี) แต่ไม่ใช่ 1.0.0 โดยถือว่าเวอร์ชัน 0.22.0 เข้ากันได้กับเวอร์ชัน 0.21.1 แบบย้อนหลัง

ไม่มีสัญลักษณ์

เมื่อไม่มีการใช้สัญลักษณ์ โดยปกติแล้วจะหมายความว่าจำเป็นต้องมีเวอร์ชันที่ตรงกันทุกประการ ตัวอย่างเช่น หากคุณมีการขึ้นต่อกันของแพ็คเกจที่แสดงเป็น 1.2.3 หมายความว่าอนุญาตให้ใช้แพ็คเกจเวอร์ชัน 1.2.3 เท่านั้น

สมมติว่าโปรเจ็กต์ของคุณขึ้นอยู่กับแพ็คเกจ "react" และคุณต้องการระบุเวอร์ชันที่แน่นอน คุณสามารถระบุการขึ้นต่อกันดังต่อไปนี้:

"dependencies": {
"react": "16.8.6"
}

ด้วยข้อกำหนดการขึ้นต่อกันนี้ อนุญาตให้ใช้เฉพาะแพ็กเกจการตอบสนองเวอร์ชัน 16.8.6 เท่านั้น

บทสรุป

โดยสรุป การทำความเข้าใจสัญลักษณ์ที่ใช้ในระบบการจัดการบรรจุภัณฑ์เป็นสิ่งสำคัญอย่างยิ่งในการหลีกเลี่ยงปัญหาการขึ้นต่อกันของโครงการของคุณ โดยสรุป สัญลักษณ์คาเร็ต (^) อนุญาตให้อัปเดตเป็นเวอร์ชันหลักถัดไป โดยถือว่ามีความเข้ากันได้แบบย้อนหลัง ในขณะที่สัญลักษณ์เครื่องหมายตัวหนอน (~) อนุญาตให้อัปเดตเป็นเวอร์ชันรองถัดไป โดยถือว่าเป็นแบบย้อนหลัง และหากไม่มีสัญลักษณ์ก็อนุญาตให้ รุ่นที่แน่นอน

👉ติดตามฉันได้ที่ อินสตาแกรม👈

เนื้อหาเพิ่มเติมได้ที่ PlainEnglish.io.

ลงทะเบียนเพื่อรับ จดหมายข่าวรายสัปดาห์ฟรี ของเรา ติดตามเราบน Twitter, LinkedIn, YouTube และ Discord .