संक्षेप में, बोवर संस्करण संख्याओं (और एनपीएम) के लिए वाक्यविन्यास को सेमीविअर कहा जाता है, जो 'शब्दार्थ संस्करण' के लिए संक्षिप्त है। आप सेमी-एनपीएम के भीतर सेवर पार्सर के लिए एपीआई पर बोवर और एनपीएम में उपयोग किए गए सेमर के विस्तृत सिंटैक्स के लिए प्रलेखन पा सकते हैं । आप semver.org पर अंतर्निहित स्पेक (जो अन्य सिंटैक्स विवरण का उल्लेख नहीं करते हैं~
) के बारे में अधिक जान सकते हैं ।
आप के साथ खेल सकते हैं एक सुपर-आसान दृश्य सेमेस्टर कैलकुलेटर है , जिससे यह सभी को ग्रो और टेस्ट करना बहुत आसान हो जाता है।
SemVer सिर्फ एक वाक्यविन्यास नहीं है! एपीआई को प्रकाशित करने के सही तरीकों के बारे में कहने के लिए कुछ बहुत ही दिलचस्प चीजें हैं, जो समझने में मदद करेगी कि वाक्यविन्यास क्या है। महत्वपूर्ण बात:
एक बार जब आप अपने सार्वजनिक एपीआई की पहचान कर लेते हैं, तो आप अपने संस्करण संख्या में विशिष्ट वेतन वृद्धि के साथ इसमें बदलाव करते हैं। XYZ (Major.Minor.Patch) के एक संस्करण प्रारूप पर विचार करें । बग फिक्स API वर्जन को प्रभावित नहीं करता है पैच वर्जन, बैकवर्ड कम्पैटिबल एपीआई एडिशन / चेंजेज इन माइनर वर्जन, और बैकवर्ड असंगत एपीआई चेंजेज इन द वर्जन वर्जन।
तो, आपका विशिष्ट प्रश्न ~
उस मेजर से संबंधित है। (जैसा कि संबंधित कार्यवाहक ऑपरेटर करता है ^
।) आप उन ~
संस्करणों की श्रेणी को सीमित करने के लिए उपयोग कर सकते हैं जिन्हें आप स्वीकार करने के लिए तैयार हैं:
- बाद के पैच-स्तर एक ही मामूली संस्करण में बदल जाते हैं ( "बग फिक्स एपीआई को प्रभावित नहीं करता" ), या:
- एक ही प्रमुख संस्करण के बाद के मामूली-स्तर में परिवर्तन ( "पीछे संगत एपीआई परिवर्धन / परिवर्तन" )
उदाहरण के लिए: संकेत करने के लिए कि आप 1.2.0 पेड़ पर किसी भी बाद के पैच-स्तर में बदलाव करेंगे, जिसकी शुरुआत 1.2.0 से होगी, लेकिन 1.3.0 से कम, आप उपयोग कर सकते हैं:
"angular": "~1.2"
or:
"angular": "~1.2.0"
यह भी आपको .x
सिंटैक्स का उपयोग करने के समान परिणाम देता है:
"angular": "1.2.x"
लेकिन, आप टिल्ड / ~
सिंटैक्स का उपयोग और भी विशिष्ट करने के लिए कर सकते हैं: यदि आप केवल 1.2.4 से शुरू होने वाले पैच-स्तरीय परिवर्तनों को स्वीकार करने के लिए तैयार हैं , लेकिन फिर भी 1.3.0 से कम है, तो आप उपयोग करेंगे:
"angular": "~1.2.4"
यदि आप उपयोग करते हैं, तो प्रमुख संस्करण की ओर, बाएँ ...
"angular": "~1"
... यह वैसा ही है ...
"angular": "1.x"
or:
"angular": "^1.0.0"
... और किसी भी मामूली-या पैच-स्तर के परिवर्तनों को 1.0.0 से ऊपर, और 2.0 से कम पर मेल खाता है:
ध्यान दें कि ऊपर की अंतिम भिन्नता: इसे 'कैरेट रेंज' कहा जाता है । कैरट एक बहुत ही भयानक लग रहा है >
, इसलिए आपको यह सोचने के लिए बहाना होगा कि इसका मतलब है "कोई भी संस्करण 1.0.0 से अधिक "। (मैं निश्चित रूप से उस पर फिसल गया हूँ।) नहीं!
कैरेट पर्वतमाला का उपयोग मूल रूप से यह कहने के लिए किया जाता है कि आप केवल बाएं-सबसे महत्वपूर्ण अंक की परवाह करते हैं - आमतौर पर प्रमुख संस्करण - और आप किसी भी छोटे या पैच-स्तर के परिवर्तनों को अनुमति देंगे जो उस बाएं-सबसे अंक को प्रभावित नहीं करते हैं। फिर भी, एक प्रमुख संस्करण को निर्दिष्ट करने वाली टिल्ड रेंज के विपरीत, कैरेट रेंज आपको एक सटीक मामूली / पैच शुरुआती बिंदु निर्दिष्ट करने देती है। तो, जबकि ^1.0.0 === ~1
, एक कैरेट रेंज जैसे ^1.2.3
कि आप कहते हैं कि आप कोई भी बदलाव लेंगे >=1.2.3 && <2.0.0
। आप एक टिल्ड श्रेणी के साथ ऐसा नहीं कर सकते।
यह सब पहली बार में भ्रामक लगता है, जब आप इसे करीब से देखते हैं। लेकिन एक सेकंड के लिए ज़ूम आउट करें, और इसके बारे में इस तरह से सोचें: कैरेट बस आपको यह कहने देता है कि आप सबसे महत्वपूर्ण है कि जो भी महत्वपूर्ण अंक बचा है। टिल्ड आपको बताता है कि आप जो भी अंक के बारे में सबसे अधिक चिंतित हैं वह सही है। बाकी विस्तार है।
यह टिल्ड और कैरेट की अभिव्यंजक शक्ति है जो बताती है कि लोग उन्हें सरल .x
वाक्यविन्यास की तुलना में बहुत अधिक उपयोग करते हैं : वे बस आपको और अधिक करने देते हैं। इसीलिए आप देखेंगे कि टिल्ड को अक्सर इस्तेमाल किया जाता है, जहां .x
भी सर्व किया जाएगा। एक उदाहरण के रूप में, स्वयं npm देखें: इसकी अपनी पैकेज.जॉन फ़ाइल में ~2.4.0
प्रारूप में बहुत अधिक निर्भरताएँ शामिल हैं , बजाय 2.4.x
प्रारूप के जो इसका उपयोग कर सकता है। से चिपके हुए ~
, वाक्यविन्यास 70+ संस्करण की निर्भरता की सूची के नीचे सभी तरह से सुसंगत है, भले ही शुरुआत में पैच संख्या स्वीकार्य हो।
वैसे भी, सेमीवीयर के लिए अभी और भी बहुत कुछ है, लेकिन मैं इसे यहाँ पर विस्तार से बताने की कोशिश नहीं करूँगा। नोड सेमी पैकेज के रीडमी पर इसे देखें । और जब आप अभ्यास कर रहे हों और सेमीवेर कैसे काम करता है, इसके बारे में अपना सिर पाने की कोशिश करते हुए सिमेंटिक वर्जन कैलकुलेटर का उपयोग करना सुनिश्चित करें ।
पुन: गैर-संवेदी संस्करण संख्याएं: OP का अंतिम प्रश्न गैर-निरंतर संस्करण संख्याओं / श्रेणियों को निर्दिष्ट करने के बारे में प्रतीत होता है (यदि मैंने इसे निष्पक्ष रूप से संपादित किया है)। हां, आप ऐसा कर सकते हैं, सामान्य डबल-पाइप "या" ऑपरेटर: का उपयोग करके ||
। इस तरह:
"angular": "1.2 <= 1.2.9 || >2.0.0"