ความหมายของ~>
เวอร์ชันข้อกำหนดในรายละเอียดอัญมณีคืออะไร?
hanna-0.1.12 ขึ้นอยู่กับ [haml (~> 2.2.8)]
ความหมายของ~>
เวอร์ชันข้อกำหนดในรายละเอียดอัญมณีคืออะไร?
hanna-0.1.12 ขึ้นอยู่กับ [haml (~> 2.2.8)]
คำตอบ:
RubyGems โทรคู่มือนี้ ในแง่ร้ายรุ่น จำกัด
สมมติว่าคุณได้ระบุหมายเลขเวอร์ชัน n-part เช่น1.3
(2-part) หรือ
3.5.6.2
(4-part) เป็นข้อ จำกัด จากนั้นเพื่อให้เป็นไปตามข้อ จำกัด หมายเลขเวอร์ชันต้องเป็นไปตามเงื่อนไขทั้งสองต่อไปนี้
ส่วน n-1 แรกของหมายเลขเวอร์ชันจะต้องเหมือนกับส่วน n-1 แรกของข้อ จำกัด (เช่น1.x
หรือ3.5.6.x
ตรงกัน แต่0.x
หรือ3.5.7.x
ไม่) และ
ส่วนสุดท้ายของหมายเลขเวอร์ชันต้องมากกว่าหรือเท่ากับส่วนสุดท้ายของข้อ จำกัด (เช่น1.9999
และ3.5.6.2
ตรงกัน แต่1.2
หรือ3.5.6.1
ไม่)
กล่าวอีกนัยหนึ่ง
~> x 1 .x 2 .x 3 . … .x n-2 .x n-1 .x n
การแข่งขัน
x 1 .x 2 .x 3 . … .x n-2 .x n-1 .y, y> = x n
เหตุผลนี้เรียกว่าข้อ จำกัด "ในแง่ร้าย" และในกรณีการใช้งานก็คือเมื่อคุณพูดว่า> x.y.z
คุณเป็นคนมองโลกในแง่ดี: คุณคิดว่าจากตรงนี้เป็นต้นไป API จะไม่มีวันเปลี่ยนแปลงตลอดไป แน่นอนว่านี่เป็นข้อสันนิษฐานที่ค่อนข้างชัดเจน แต่โครงการส่วนใหญ่มีกฎระเบียบที่เกี่ยวกับเมื่อพวกเขาได้รับอนุญาตให้
ทำลายกันไปข้างหลังและวิธีการที่พวกเขามีการเปลี่ยนแปลงหมายเลขรุ่นของพวกเขาเมื่อพวกเขาทำแบ่งกันไปข้างหลัง คุณสามารถเข้ารหัสกฎการกำหนดหมายเลขเวอร์ชันเหล่านั้นโดยใช้ข้อ จำกัด ในแง่ร้ายและด้วยเหตุนี้คุณจึงมั่นใจได้ว่าโค้ดของคุณจะใช้งานได้ตลอดเวลา (สมมติว่าผู้เขียนโครงการอื่นปฏิบัติตามกฎของเขาเองซึ่งน่าเสียดายที่ไม่ได้เป็นเช่นนั้นเสมอไป ).
กล่าวอีกนัยหนึ่งคือคุณสามารถใช้สัญลักษณ์นี้เพื่ออัปเดตอัญมณีของคุณด้วยการอัปเดตเล็กน้อยทั้งหมดและหลีกเลี่ยงการอัปเดตหลักที่อาจทำให้แอปของคุณเสียหายได้
ตัวอย่างเช่น "~> 1.2" จะอัปเดตอัญมณีของคุณเป็น 1.3 (หากมีการเปิดตัวเวอร์ชันดังกล่าว) แต่จะไม่อัปเดตเป็น 2.0
ฉันคิดว่าเอกสาร Bundlerสรุปได้ดีที่สุด:
ตัวระบุ ~> มีความหมายพิเศษแสดงโดยตัวอย่างได้ดีที่สุด ~> 2.0.3 เหมือนกับ> = 2.0.3 และ <2.1 ~> 2.1 เหมือนกับ> = 2.1 และ <3.0 ~> 2.2.beta จะตรงกับเวอร์ชันก่อนวางจำหน่ายเช่น 2.2.beta.12
ตรงกับเวอร์ชันใด ๆ ที่มีส่วนหลัก / รองเดียวกัน ซึ่งหมายความว่าในกรณีนี้ haml ~> 2.2.8 จะตรงกับเวอร์ชัน 2.2.x ใด ๆ
สิ่งนี้สามารถใช้เพื่อตรวจสอบให้แน่ใจว่าการทำลาย API ในอัญมณีใหม่จะไม่ส่งผลให้ขึ้นอยู่กับอัญมณีที่เพิ่งเปลี่ยน แต่เปลี่ยนที่จะทำลายฮันนาในกรณีนี้
~> 2.0
และ~> 2.0.0
- การแข่งขันในอดีต 2.0, 2.1, 2.2.7 และทุกอย่างอื่น ๆ จนถึง (แต่ไม่รวม) 3.0 รายการหลังตรงกับ 2.0, 2.0.1, 2.0.999 และทุกอย่างอื่น ๆ จนถึง (แต่ไม่รวม) 2.1
~> 2.2.8
จะไม่ตรงกับ "2.2.x" เวอร์ชันใด ๆ ตามที่คำตอบอ้าง แต่มีเพียงเวอร์ชัน 2.2.x ที่มี x ≥ 8 IOW: คำตอบนั้นดีที่สุดยิ่งไม่สมบูรณ์มากขึ้นมีขอบไม่ถูกต้องและแน่นอน ทำให้เข้าใจผิด