बोवर (और npm) संस्करण सिंटैक्स क्या है?


274

बोवर मुझे निम्नलिखित सिंटैक्स का उपयोग करते हुए संकुल के लिए संस्करण आवश्यकताएँ निर्दिष्ट करने में सक्षम बनाता है:

"dependencies": {
  "<name>": "<version>",
},

लेकिन मुझे यह पता नहीं चल पाया है कि किस वाक्य का उपयोग करना है <version>। मुझे पता है कि मैं संस्करणों को निर्दिष्ट कर सकता हूं:

  • के साथ एक निश्चित संस्करण से अधिक है ">1.0.0"
  • एक संस्करण से अधिक या बराबर: ">=1.0.0"
  • या कुछ रेंज में "1.0.0 - 2.0.0":।

मुझे यह भी पता है कि एक सामान्य संस्करण वाक्यविन्यास है जिसमें टिल्ड शामिल है "~1.0.0":। लेकिन मुझे यकीन नहीं है कि इसका क्या मतलब है और क्या यह जैसा है वैसा ही है "=1.0.0"

मुझे यह जानने में भी दिलचस्पी है कि क्या मैं कई गैर-लगातार संस्करणों को निर्दिष्ट करने में सक्षम हूं, जैसे कि ठीक इसके 1.0.3अतिरिक्त संस्करण 1.5.0आदि ...


जवाबों:


341

संक्षेप में, बोवर संस्करण संख्याओं (और एनपीएम) के लिए वाक्यविन्यास को सेमीविअर कहा जाता है, जो 'शब्दार्थ संस्करण' के लिए संक्षिप्त है। आप सेमी-एनपीएम के भीतर सेवर पार्सर के लिए एपीआई पर बोवर और एनपीएम में उपयोग किए गए सेमर के विस्तृत सिंटैक्स के लिए प्रलेखन पा सकते हैं । आप 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"

27
तो ~विशेष रूप से मतलब है कि पैच (तीसरा) संख्या एक निर्दिष्ट से अधिक हो सकती है, उदाहरण के ~1.2.3लिए बराबर है >=1.2.3 <1.3.0
z0r

1
ऊपर दिए गए एडिट इनलाइन पर माइनर (सेकंड) नंबर के लिए भी इस्तेमाल किया जा सकता है।
एक्सएमएल

दिलचस्प है, कि SemVer प्रलेखन भी एक्स-नोटेशन की अनुमति देता है (जो कि मनुष्यों के लिए बहुत अधिक सहज है)।
फ्रैंक नॉक

2
एक्स-नोटेशन पहली बार में पढ़ने के लिए सहज है, लेकिन बहुत कम लचीला है। उदाहरण के लिए, '1.1.x' === '>=1.1.0' === '~1.1.0'। 1.1.0 मामला आसान है। लेकिन एक्स-नोटेशन दानेदार नहीं हो सकता है, जैसा कि '>=1.1.4'या हो सकता है '~1.1.4'। तो, फिर आप '1.1.x'अपनी निर्भरता सूची '~2.7.3'में एक जगह , और दूसरी जगह से हवा करते हैं। यह ठीक है, और काम करता है, लेकिन एक डेवलपर को एक सूची को पढ़ने के लिए कई सिंटैक्स को पार्स करने की आवश्यकता होती है। और, यदि आप प्रोग्राम को वर्चुअली सेट करने के लिए पैकेज लिख रहे हैं, तो आप एक ही सिंटैक्स चाहते हैं। और, अधिकांश लोग बदलावों को रोकना चाहते हैं। इसलिए, सभी समस्याओं के साथ हल किया ~
एक्सएमएल

1
हा। मुझे लगता है कि "ग्रॉक" नर्ड-लाइटेड कल्चर (और संभवतः उम्र से संबंधित), @ क्लोंडेक्स की तुलना में कम भौगोलिक है। भविष्य के पाठकों के लिए: यह एक अजीब भूमि में हेनलिन के अजनबी का संदर्भ है ...
XML

141

सेमर के आधार पर , आप उपयोग कर सकते हैं

  • हाइफ़न रेंज्स एक्सवाईजेड - एबीसी 1.2.3-2.3.4 इंगित करता है > = 1.2.3 <= 2.3.4

  • एक्स-सीमाओं 1.2.x 1.X 1.2.*

  • टिल्ड रेंज ~1.2.3 ~1.2 पैच-स्तर में बदलाव या मामूली संस्करण में बदलाव की अनुमति देता है।

  • कैरेट रेंज ^ 1.2.3 ^ 0.2.5 ^ 0.0.4

    उन परिवर्तनों को अनुमति देता है जो [प्रमुख, मामूली, पैच] टपल में बाएं-सबसे गैर-शून्य अंक को संशोधित नहीं करते हैं

    • ^1.2.x (मतलब> = 1.2.0 <2.0.0)
    • ^0.0.x (मतलब> = 0.0.0 <0.1.0)
    • ^0.0 (मतलब> = 0.0.0 <0.1.0)

21
उत्तर को पढ़ने के लिए आसान नहीं बकवास के लिए धन्यवाद। मुझे वापस या कुछ भी ट्रैक करने की ज़रूरत नहीं थी, बस, बूम, इसका जवाब है। शाबाश;)
toddmo

76

बोवर सेमर सिंटैक्स का उपयोग करता है , लेकिन यहां कुछ त्वरित उदाहरण दिए गए हैं:

आप एक विशिष्ट संस्करण स्थापित कर सकते हैं:

$ bower install jquery#1.11.1

आप 'इस के साथ शुरू होने वाले किसी भी संस्करण' को निर्दिष्ट करने के लिए ~ का उपयोग कर सकते हैं:

$ bower install jquery#~1.11

आप एक साथ कई संस्करण आवश्यकताओं को निर्दिष्ट कर सकते हैं:

$ bower install "jquery#<2.0 >1.10"

1
मैं इसके व्यावहारिक उपयोग को लेकर उत्सुक हूं। रूले स्थापना?
gravidThoughts

@ XMLilley के उत्तर (और सेमर डॉक्स) को देखते हुए 'स्टार्ट विथ' गलत लगता है, क्योंकि 1.12, 1.13 भी ठीक होगा, जब तक कि प्रमुख संस्करण ऊपर नहीं जाता है ...
फ्रैंक नोके

13

latestउपलब्ध सबसे हाल के संस्करण को स्थापित करने के लिए आप कीवर्ड का उपयोग भी कर सकते हैं :

  "dependencies": {
    "fontawesome": "latest"
  }

1
सेमेस्टर में इसका उल्लेख नहीं है। आपने कहां स्थापित किया यह मान्य है? :) यह कहता है " "*" := >=0.0.0(किसी भी संस्करण को संतुष्ट करता है)" जो करीब है लेकिन थोड़ा अस्पष्ट है क्योंकि यह विशेष रूप से नवीनतम नहीं कहता है इसलिए यह पहला ऐसा हो सकता है जो इसे पाता है?
गज़ब

ईमानदार होने के लिए, यह सिर्फ परीक्षण और त्रुटि थी - मैंने इसकी कोशिश की और यह काम कर गया! आप सही हो सकते हैं कि यह 100% वैध नहीं है, लेकिन यह काम करता है।
शकर

7

यदि कोई पैच नंबर नहीं है, तो गैर-टिल्ड संस्करण में ~संलग्न .xकरने के बराबर है । यदि कोई पैच नंबर है, तो ~सभी पैच नंबर> = निर्दिष्ट एक को अनुमति देता है।

~1     := 1.x
~1.2   := 1.2.x
~1.2.3 := (>=1.2.3 <1.3.0)

मैं स्वीकार किए जाते हैं जवाब पर टिप्पणी करने के लिए पर्याप्त अंक नहीं हैं, लेकिन टिल्ड जानकारी से कुछ के साथ प्रलेखन semver जुड़ा हुआ अंतर पर है: "angular": "~1.2"जाएगा नहीं मेल खाते हैं 1.3, 1.4, 1.4.9। इसके अलावा "angular": "~1"और समकक्ष नहीं"angular": "~1.0" हैं । इसे एनपीएम सेवर कैलकुलेटर से सत्यापित किया जा सकता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.