Featured image of post คู่มือการจัดการเวอร์ชันแพ็กเกจและ SemVer: หมายเลขเวอร์ชันใน package.json หมายถึงอะไร?

คู่มือการจัดการเวอร์ชันแพ็กเกจและ SemVer: หมายเลขเวอร์ชันใน package.json หมายถึงอะไร?

เจาะลึกตรรกะ Semantic Versioning (SemVer) อธิบายความหมายของสัญลักษณ์อย่าง ^ และ ~ ใน package.json และแบ่งปันวิธีที่ pnpm-lock.yaml ช่วยให้สภาพแวดล้อมการพัฒนาของทีมสอดคล้องกันและแก้ไขข้อขัดแย้งของเวอร์ชัน

คุณเคยเจอสถานการณ์นี้ไหม: คุณเขียน ^0.0.3 ใน package.json รัน pnpm update เวอร์ชันล่าสุดออกมาเป็น 0.1.0 แต่แพ็กเกจกลับไม่ขยับเลย? pnpm เสีย หรือคุณกำลังเล่น “ย่ำอยู่กับที่”? อย่ากังวล คุณไม่ได้อยู่คนเดียว นี่คือ “กลไกประกันความปลอดภัย” ในโลกซอฟต์แวร์

ถอดรหัส X.Y.Z: สเปคของรถแต่ง

ลองจินตนาการว่าคุณกำลังเปลี่ยนชิ้นส่วนรถยนต์ หมายเลขเวอร์ชัน X.Y.Z (เช่น 1.2.3) ก็เหมือนกับรายการอัปเดตสำหรับรถคันนี้:

ฟิลด์ สรุป คำอธิบาย
X การเปลี่ยนแปลงใหญ่ นี่เหมือนกับ การเปลี่ยนเครื่องยนต์ หลังจากเปลี่ยนแล้ว นิสัยการขับขี่เดิมอาจต้องเปลี่ยนใหม่ทั้งหมด แม้แต่ตำแหน่งพวงมาลัยก็อาจเปลี่ยนไป นี่คือสิ่งที่เรียกว่า “การเปลี่ยนแปลงที่ส่งผลกระทบ” (Breaking Changes)
Y ฟีเจอร์ใหม่ นี่เหมือนกับ การติดตั้งกล้องถอยหลัง ฟังก์ชันแข็งแกร่งขึ้น มีของมากขึ้น แต่วิธีการขับขี่เดิมของคุณไม่ได้รับผลกระทบเลย เป็นการอัปเกรดที่ไม่เจ็บปวด
Z การซ่อมแซมเล็กน้อย นี่เป็นเพียง การปะยาง หรือเปลี่ยนที่ปัดน้ำฝน เป็นการแก้ไขบั๊กล้วนๆ ถ้าคุณไม่ดูหมายเลขเวอร์ชัน คุณอาจไม่รู้ด้วยซ้ำว่ามีการอัปเดต

จิตวิญญาณแห่งสัญญาของสัญลักษณ์: “สัญญาความปลอดภัย” ของตัวแทนประกัน

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

สัญลักษณ์ ตัวอย่าง (1.2.3) ขอบเขตการอัปเกรด คำพูดง่ายๆ ของมือเก๋า
ไม่มีสัญลักษณ์ 1.2.3 คงที่ 1.2.3 ปักใจ: ฉันต้องการเวอร์ชันนี้เท่านั้น เปลี่ยนน็อตตัวเดียวก็ไม่ได้
Tilde ~ ~1.2.3 < 1.3.0 ปรับแต่งเล็กน้อย: อนุญาตให้แก้บั๊ก (Z) เท่านั้น ห้ามเพิ่มฟีเจอร์ใหม่
Caret ^ ^1.2.3 < 2.0.0 ปลดล็อกฟีเจอร์: เพิ่มฟีเจอร์ (Y) ได้ แต่อย่าเปลี่ยนเครื่องยนต์ (X)

ข้อควรระวังพิเศษ: ทำไม 0.x.x ถึงทำให้ pnpm หัวโบราณ?

นี่คือสาเหตุที่ ^0.0.3 ของคุณไม่อัปเกรด! ก่อนที่หมายเลขเวอร์ชันจะกระโดดไปที่ 1.0.0 นี่เรียกว่า “ช่วงก่อตั้ง” ในโลกนักพัฒนา

ตัวแทนประกัน (pnpm) จะหัวโบราณมาก: เขาคิดว่าทุกการอัปเดตของ 0.0.x อาจเป็นการยกเครื่องใหม่ทั้งหมด! ดังนั้น ^0.0.3 จึงกล้าอัปเดตแค่ถึง 0.0.4 ไม่กล้าแม้แต่จะข้ามไป 0.1.0 ถ้าคุณต้องการอัปเกรด คุณต้องแก้ไข package.json ด้วยตนเองหรือใช้วิธีบังคับ

ทักษะการแซงของมือเก๋า: การบังคับอัปเกรด

เมื่อการอัปเดตอัตโนมัติล้มเหลว หรือคุณมั่นใจว่าต้องการ “พุ่ง” ไปยังเวอร์ชันล่าสุด คุณสามารถใช้สองท่านี้:

วิธีการ เนื้อหา
ระบุชื่อโดยตรง พิมพ์ pnpm add some-package@latest นี่เหมือนกับผู้กำกับสั่งโดยตรงว่า: “เอาตัวนักแสดงล่าสุดมาให้ฉัน!”
การเลือกแบบโต้ตอบ พิมพ์ pnpm update --interactive (หรือ pnpm up -i) สิ่งนี้จะแสดงรายการแพ็กเกจที่อัปเดตได้ทั้งหมด ให้คุณเลือกเหมือนเลือกเมนู

ไม่ใช่แค่สูตรอาหาร แต่เป็นอาหารแช่แข็ง: pnpm-lock.yaml

ในการพัฒนาเป็นทีม pnpm-lock.yaml คือ “สูตรลับประจำตระกูลที่ห้ามแก้ไข”:

ไฟล์ เนื้อหา
package.json (สูตรอาหาร) มันบอกว่า “ต้องใช้แป้ง ไข่” แต่ไม่ได้บอกว่ายี่ห้ออะไร แหล่งผลิตที่ไหน รสชาติที่ปรุงออกมา (สภาพแวดล้อม) ของทุกคนจะผิดเพี้ยนไป
pnpm-lock.yaml (อาหารแช่แข็ง) บันทึกแหล่งผลิตและน้ำหนักของส่วนผสมทุกอย่างไว้อย่างแม่นยำ เมื่อเพื่อนร่วมทีมรัน pnpm install มันเหมือนกับการเปิดแพ็คอาหารแช่แข็งแบบเดียวกันเป๊ะ รับประกันว่า “Vibe” ตรงกันทุกประการ

เมื่อเจอ “รถชนท้ายต่อเนื่อง” (ข้อขัดแย้งของไฟล์ Lock)

อย่าแก้ไขเครื่องหมายข้อขัดแย้งด้วยตนเอง! ในนั้นเต็มไปด้วยค่าแฮชที่เครื่องอ่าน วิธีที่สง่างามที่สุดคือรันโดยตรง:

pnpm install

pnpm จะอ่านความต้องการจากทั้งสองฝ่ายและคำนวณสัญญาใหม่ที่สมบูรณ์แบบโดยอัตโนมัติ

บทสรุป

การเชี่ยวชาญหมายเลขเวอร์ชันไม่ใช่เพื่อการสอบ แต่เพื่อให้สภาพแวดล้อมการพัฒนาของคุณ “มั่นคงดั่งหินผา” ครั้งหน้าถ้าคุณอัปเกรดเวอร์ชันไม่ได้ อย่าสงสัยในชีวิต ตอนนี้คุณคือมือเก๋าที่มีใบขับขี่แล้ว!

All rights reserved,未經允許不得隨意轉載
ถูกสร้างด้วย Hugo
ธีม Stack ออกแบบโดย Jimmy