दिलचस्प पोस्ट
जावास्क्रिप्ट के साथ वर्तमान यूआरएल प्राप्त करें? सी # ऑब्जेक्ट पूलिंग पैटर्न कार्यान्वयन GetContext () के बीच का अंतर, getApplicationContext (), getBaseContext () और "यह" ए 4 पेपर आकार सेट करने के लिए सीएसएस स्ट्रिंग के रूप में संपत्ति का नाम प्राप्त करें jQuery: '$ (यह)' और 'यह' के बीच का अंतर क्या है? एक्सेल वीबीए प्रदर्शन – 1 मिलियन पंक्तियाँ – 1 मिनट से कम में मूल्य युक्त पंक्तियों को हटाएं एंड्रॉइड: संसाधनों से नाम कैसे मिल सकता है? अजगर "के साथ" क्या डिज़ाइन किया गया है? क्या विंडोज पर आसार की तरह कुछ है? PHP द्वारा HTTP प्रमाणीकरण लॉगआउट PHP – बहुआयामी सरणी मानों तक पहुंच पाठ फ़ाइलों में स्ट्रिंग की खोज कैसे करें? Clock_t प्रिंट करने के लिए printf का उपयोग करने का सही तरीका क्या है? डिवीजन रिटर्न शून्य

पैकेज। जेएसन में टिल्ड (~) और कैरेट (^) के बीच क्या अंतर है?

मैं नवीनतम स्थिर node और npm अपग्रेड करने के बाद, मैंने npm install moment --save की कोशिश की यह caret(^) उपसर्ग के साथ package.json में प्रवेश को बचाता है। पहले, यह एक tilde(~) उपसर्ग था।

  1. npm में ये परिवर्तन क्यों किए गए हैं?
  2. tilde(~) और caret(^) बीच अंतर क्या है?
  3. दूसरों पर क्या फायदे हैं?

वेब के समाधान से एकत्रित समाधान "पैकेज। जेएसन में टिल्ड (~) और कैरेट (^) के बीच क्या अंतर है?"

सबसे सरल शब्दों में, टिल्ड सबसे हालिया लघु संस्करण (मध्य संख्या) से मेल खाता है। ~ 1.2.3 सभी 1.2.x संस्करणों से मेल खाएगा लेकिन 1.3.0 याद होगा

दूसरी तरफ कायर, अधिक आराम से है यह आपको सबसे हाल ही में प्रमुख संस्करण (प्रथम संख्या) में अपडेट करेगा। ^ 1.2.3 1.3.0 सहित किसी भी 1.xx रिलीज से मेल खाएगा, लेकिन 2.0.0 पर बंद होगा।

http://fredkschott.com/post/2014/02/npm-no-longer-defaults-to-tildes/

मैं आधिकारिक npmj दस्तावेजों को भी जोड़ना चाहूंगा, जो संस्करण में विशिष्टता के सभी तरीकों का वर्णन करता है जिसमें प्रश्न में संदर्भित हैं –

https://www.npmjs.org/doc/files/package.json.html

https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • ~version "लगभग समतुल्य संस्करण" एनएमएम सेवेवर देखें – टिल्ड रेंजस और सेवर (7)
  • ^version " ^version साथ संगत" देखें एनएमएम सेवेवर – कैरेट रेंजस एंड सेवर (7)
  • version वास्तव में संस्करण से मेल खाना चाहिए
  • >version से अधिक होना चाहिए
  • >=version आदि
  • <version
  • <=version
  • 1.2.x 1.2.0, 1.2.1, आदि, लेकिन 1.3.0 नहीं
  • http://sometarballurl (यह एक टारबॉल का यूआरएल हो सकता है जो स्थानीय स्तर पर डाउनलोड और इंस्टॉल किया जाएगा
  • * किसी भी संस्करण से मेल खाता है
  • latest नवीनतम रिलीज प्राप्त

उपरोक्त सूची संपूर्ण नहीं है अन्य संस्करण के विनिर्देशकों में गीथहब यूआरएल और गिटहब उपयोगकर्ता रेपो, स्थानीय रास्तों और विशिष्ट एनपीएम टैग के साथ संकुल शामिल हैं

एनपीएम एक निर्दिष्ट की तुलना में एक पैकेज के नए संस्करण को स्थापित करने की अनुमति देता है। टिल्ड का प्रयोग (~) आपको बग ठीक रिलीज़ और कैरेट देता है (^) आपको पीछे की ओर संगत नई कार्यक्षमता भी देता है

समस्या पुराने संस्करणों में आमतौर पर बग फिक्स को प्राप्त नहीं होती है, इसलिए एनपीएम के लिए --save लिए डिफ़ॉल्ट के रूप में कैरेट (^) का उपयोग करता है।

सेवर तालिका

के अनुसार: "सेवर ने समझाया – क्यों मेरे पैकेज में एक कैरेट (^) है। जेसन?" ।

ध्यान दें कि नियम 1.0.0 से ऊपर के संस्करणों पर लागू होते हैं और प्रत्येक प्रोजेक्ट को सिमेंटिक वर्जनिंग का अनुसरण नहीं किया जाता है।

अवधारणाओं का एक दृश्य विवरण यहां दिया गया है:

सेवर आरेख

स्रोत: "सिमेंटिक वर्जनिंग चीटशीट"

~ प्रमुख और मामूली संख्या को हल करता है इसका उपयोग तब किया जाता है जब आप अपनी निर्भरता में बग-फिक्स को स्वीकार करने के लिए तैयार हों, लेकिन किसी भी संभावित रूप से असंगत बदलाव नहीं करना चाहते हैं

^ केवल प्रमुख संख्या को हल करता है इसका उपयोग तब किया जाता है जब आप अपनी निर्भरता को बारीकी से देख रहे हों और आपकी कोड को तेज़ी से बदलने के लिए तैयार हैं यदि छोटी रिलीज असंगत हो जाएगी।

उस के अतिरिक्त, ^ पुराने एनपीपी संस्करणों द्वारा समर्थित नहीं है , और सावधानी के साथ उपयोग किया जाना चाहिए

तो, ^ एक अच्छा डिफ़ॉल्ट है, लेकिन यह सही नहीं है। मैं आपको सावधानीपूर्वक सेववर ऑपरेटर को चुनना और कॉन्फ़िगर करने का सुझाव देता हूं जो आपके लिए सबसे उपयोगी है।

Semver

 <major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2 
  • परीक्षण के लिए एनपीएम सेवर कैलक्यूलेटर का उपयोग करें (यद्यपि ^ के लिए स्पष्टीकरण (एक ही प्रमुख श्रेणी में एक विशेष संस्करण से अधिक सब कुछ शामिल है) और ~ (एक ही छोटी श्रेणी में एक विशेष संस्करण से अधिक सब कुछ शामिल है) 100% सही नहीं हैं, कैलकुलेटर ठीक काम करने लगता है )
  • वैकल्पिक रूप से, इसके बजाय सेमवीर चेक का उपयोग करें , जिसके लिए आपको कोई पैकेज चुनने की आवश्यकता नहीं है और स्पष्टीकरण भी प्रदान करता है।

परिवर्तनों को अनुमति दें या अस्वीकार करें

  • पिन संस्करण: 1.2.3
  • का प्रयोग करें ^ (जैसे सिर) बाईं ओर से दूसरे गैर-शून्य स्तर पर अपडेट की अनुमति देता है: ^0.2.3 मतलब 0.2.3 <= v < 0.3
  • उपयोग ~ (पूंछ की तरह) आम तौर पर सबसे ज्यादा दाम स्थिर या स्तर छोड़ा अगर शून्य सेट करें:
    • ~1 मतलब 1.0.0 <= v < 2.0.0
    • ~1.2 मतलब 1.2.0 <= v < 1.3.0
    • ~1.2.4 मतलब 1.2.4 <= v < 1.3.0
  • सबसे ज्यादा स्तर खाली करें: 0.2 अर्थ 0.2 <= v < 1 क्योंकि ~ से अलग
    • छोड़े गए स्तर का संस्करण शुरू करना हमेशा 0
    • आप सबलेवल निर्दिष्ट किए बिना प्रमुख संस्करण को प्रारंभ कर सकते हैं

सभी (उम्मीद है) संभावनाएं

प्रमुख स्तर को प्रारंभ करना और अपडेट को ऊपर की ओर अनुमति दें

 * or "" (empty string) any version 1 v >= 1 

प्रमुख स्तर रुकें

 ~0 (0) 0.0 <= v < 1 0.2 0.2 <= v < 1 // Can't do that with ^ or ~ ~1 (1, ^1) 1 <= v < 2 ^1.2 1.2 <= v < 2 ^1.2.3 1.2.3 <= v < 2 ^1.2.3-beta.4 1.2.3-beta.4 <= v < 2 

मामूली स्तर रुकें

 ^0.0 (0.0) 0 <= v < 0.1 ~0.2 0.2 <= v < 0.3 ~1.2 1.2 <= v < 1.3 ~0.2.3 (^0.2.3) 0.2.3 <= v < 0.3 ~1.2.3 1.2.3 <= v < 1.3 

पैच-स्तर रुकें

 ~1.2.3-beta.4 1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed) ^0.0.3-beta 0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed) ^0.0.3-beta.4 0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed) 

अपडेट अस्वीकार करें

 1.2.3 1.2.3 ^0.0.3 (0.0.3) 0.0.3 

नोटिस : लापता स्तर के लिए any के बिना, बड़ी, नाबालिग, पैच या beta निर्दिष्ट करना गुम है।

सूचना : जब आप पाक्केज को स्थापित करते हैं जो कि प्रमुख स्तर के रूप में है, तो अद्यतन केवल नए बीटा / जनसंपर्क स्तर के संस्करण को स्थापित करेगा! ऐसा इसलिए क्योंकि npm package.json रूप में डिफ़ॉल्ट रूप से सेट करता है। package.json और जब स्थापित संस्करण 0.1.3 की तरह होता है, तो यह सभी प्रमुख / लघु / पैच स्तरों को जमा देता है।

~ : उचित रूप से करीब

  ~1.1.5: 1.1.0 <= accepted < 1.2.0 

^ : साथ संगत

  ^1.1.5: 1.1.5 <= accepted < 2.0.0 ^0.1.3: 0.1.3 <= accepted < 0.2.0 ^0.0.4: 0.0.4 <= accepted < 0.1.0 

^ 1 है। [कोई]। [कोई] (नवीनतम लघु संस्करण)
~ 1.2 है। [कोई] (नवीनतम पैच)

एक महान पढ़ा यह ब्लॉग पोस्ट है कि कैसे semver एनपीएम पर लागू होता है
और वे इसे सेमीवेस्टर मानक से मेल करने के लिए क्या कर रहे हैं
http://blog.npmjs.org/post/98131109725/npm-2-0-0

टोटल मिलान को "टूटा" माना जा सकता है क्योंकि यह ^0.1.2 से 0.2.0 अद्यतन करने के लिए अभ्यस्त 0.2.0 । जब सॉफ्टवेयर 0.xy संस्करणों का उपयोग कर उभर रहा है और टोपी मिलान केवल आखिरी अलग अंक ( y ) से मेल खाएगा। यह उद्देश्य पर किया जाता है इसका कारण यह है कि जब भी सॉफ्टवेयर एपीआई तेजी से बढ़ता जा रहा है: एक दिन आपके पास इन विधियां हैं और दूसरे दिन आपके पास उन तरीकों और पुराने लोग चले गए हैं। यदि आप उन लोगों के लिए कोड तोड़ना नहीं चाहते हैं जो पहले से ही आपकी लाइब्रेरी का उपयोग कर रहे हैं तो आप प्रमुख संस्करण बढ़ते हैं और बढ़ते हैं: उदा। 1.0.0 -> 2.0.0 -> 3.0.0 इसलिए, जब तक आपके सॉफ़्टवेयर के अंत में 100% पूर्ण और पूर्ण विशेषताओं में ये संस्करण 11.0.0 तरह होंगे और यह बहुत ही सार्थक नहीं दिखता है, और वास्तव में भ्रामक लग रहा है। यदि आप, 0.1.x -> 0.2.x -> 0.3.x संस्करण का उपयोग करते हुए, सॉफ्टवेयर के अंत में 100% पूर्ण किए गए हैं और पूर्ण विशेषताओं में संस्करण 1.0.0 रूप में रिलीज़ किया गया है और इसका मतलब है "यह रिलीज एक दीर्घकालिक सेवा है, आप आगे बढ़ सकते हैं और अपने उत्पादन कोड में पुस्तकालय के इस संस्करण का उपयोग कर सकते हैं, और लेखक कल, या अगले महीने सब कुछ नहीं बदलेगा, और वह पैकेज को नहीं छोड़ेगा"।

नियम है: 0.xy संस्करण का उपयोग करें जब आपका सॉफ़्टवेयर अभी तक परिपक्व नहीं हो और इसे मध्य अंक में वृद्धि के साथ रिलीज न करें, जब आपका पब्लिक एपीआई बदलता है (इसलिए ^0.1.0 वाले लोग 0.2.0 अपडेट प्राप्त नहीं करेंगे और इसे ' टी अपने कोड को तोड़ने)। फिर, जब सॉफ्टवेयर परिपक्व होता है, तो 1.0.0 तहत इसे रिलीज करें और प्रत्येक बार आपका पब्लिक एपीआई बदलता है (इसलिए ^1.0.0 वाले लोगों को 2.0.0 अपडेट नहीं मिलेगा और यह उनके कोड को नहीं तोड़ देगा) हर बार बाएं सबसे बड़ा अंक बढ़ाएं।

 Given a version number MAJOR.MINOR.PATCH, increment the: MAJOR version when you make incompatible API changes, MINOR version when you add functionality in a backwards-compatible manner, and PATCH version when you make backwards-compatible bug fixes. 

एक लाइनर स्पष्टीकरण

मानक संस्करण प्रणाली प्रमुख है। Minor.build (उदाहरण 2.4.1)

एनपीएम चेक और इन अक्षरों के आधार पर किसी विशेष पैकेज के संस्करण को हल करता है

~ : प्रमुख संस्करण तय हो गया है, मामूली संस्करण तय हो गया है, किसी बिल्ड संख्या से मेल खाता है

उदा: ~ 2.4.1 का मतलब यह 2.4.x की जांच करेगा जहां एक्स कुछ भी है

^ : प्रमुख संस्करण तय किया गया है, किसी भी मामूली संस्करण से मेल खाता है, किसी बिल्ड नंबर से मेल खाता है

उदाहरण के लिए: 2.4.1 का अर्थ यह 2.xx के लिए जांच करेगा जहां एक्स कुछ भी है

~ टिल्ड:

  • ~ प्रमुख और मामूली संख्या को हल करता है
  • इसका उपयोग तब किया जाता है जब आप अपनी निर्भरता में बग-फिक्स को स्वीकार करने के लिए तैयार हों, लेकिन किसी भी संभावित रूप से असंगत बदलाव नहीं करना चाहते हैं
  • टिल्ड सबसे ताजा संस्करण (मध्य संख्या) से मेल खाता है।
  • ~ 1.2.3 सभी 1.2.x संस्करणों से मिलान होगा, लेकिन यह 1.3.0 याद होगा
  • टिल्ड (~) आपको बग ठीक रिलीज़ देता है

^ कैरेट:

  • ^ केवल प्रमुख संख्या को हल करता है
  • इसका उपयोग तब किया जाता है जब आप अपनी निर्भरता को बारीकी से देख रहे हों और आपकी कोड को तेज़ी से बदलने के लिए तैयार हैं यदि छोटी रिलीज असंगत हो जाएगी।
  • यह आपको सबसे हाल ही में प्रमुख संस्करण (प्रथम संख्या) में अपडेट करेगा।
  • ^ 1.3.3 1.3.0 सहित किसी भी 1.xx रिलीज से मेल खाएगा, लेकिन यह 2.0.0 पर बंद होगा।
  • केरेट (^) आपको पीछे की ओर-संगत नई कार्यक्षमता भी देता है।

^: वामपंथी गैर-शून्य संस्करण (बाईं ओर से नंबर 1 शून्य शून्य संस्करण अंक) से कम संस्करण में बदलाव को स्वीकार करें।

~: वर्जन में बदलाव 2 से भी कम बाएं ज़्यादा गैर-शून्य संस्करण (बाएं ओर से नंबर 2 शून्य संस्करण संस्करण) स्वीकार करें। या अगर कोई दूसरा बाएं ज़्यादा गैर-शून्य संस्करण नहीं है तो वामपंथी संस्करण से कम संस्करण में बदलाव को स्वीकार करें।

आपने शायद पैकेज (जेड) में टिल्ड (~) और कैरेट (^) को देखा है। उनके बीच क्या अंतर है?

जब आप एनपीएम स्थापित पल करते हैं – सचेत, यह कैरेट (^) उपसर्ग के साथ package.json में प्रवेश को बचाता है।

टिल्ड (~)

सबसे सरल शब्दों में, टिल्ड (~) सबसे ताजा संस्करण (मध्य संख्या) से मेल खाता है। ~ 1.2.3 सभी 1.2.x संस्करणों से मेल खाएगा लेकिन 1.3.0 याद होगा

कैरेट (^)

दूसरी ओर, कैरेट (^), अधिक आराम से है। यह आपको सबसे हाल ही में प्रमुख संस्करण (प्रथम संख्या) में अपडेट करेगा। ^ 1.2.3 1.3.0 सहित किसी भी 1.xx रिलीज से मेल खाएगा, लेकिन 2.0.0 पर बंद होगा।