2017-05-31 10 views

उत्तर

5

मुख्य अंतर यह है कि लॉकफाइल नेस्टेड निर्भरताओं को भी लॉक कर दिया है - आपकी निर्भरताओं की सभी निर्भरताओं, और इसी तरह। उन सभी परिवर्तनों का प्रबंधन और ट्रैकिंग अविश्वसनीय रूप से कठिन हो सकता है, और उपयोग किए जाने वाले पैकेजों की संख्या तेजी से बढ़ सकती है। 2 पुस्तकालयों कि क्रमश: ~1.0.0 और ~2.0.0 पर foo निर्दिष्ट पर विचार -

वहाँ भी स्थितियों में, जहां आप मैन्युअल रूप से निर्दिष्ट नहीं कर सकते कि एक पैकेज का एक विशेष संस्करण इस्तेमाल किया जाना चाहिए रहे हैं। प्रमुख संस्करण में अंतर हमें बताता है कि foo @ v1 का एपीआई foo @ v2 के एपीआई से मेल नहीं खा रहा है, इसलिए कोई भी तरीका नहीं है कि आप अपने ऐप स्तर पर पैकेज संस्करण को विवाद और असफलताओं के बिना ओवरराइड कर सकें।

अंत में, आपको आश्चर्य हो सकता है कि "फिर से सेमेस्टर क्यों है? क्यों न केवल सभी संकुलों को उनकी निर्भरताओं के सटीक संस्करण को निर्दिष्ट करते हैं?" सेमेवर के मुख्य फायदों में से एक यह है कि इसका मतलब है कि जब भी उप-निर्भरता अपडेट होते हैं तो आपको पेड़ में हर निर्भरता को अपडेट करने की आवश्यकता नहीं होती है। अगर मैं foo पर भरोसा करता हूं, और foobar पर निर्भर करता है, और bar में केवल एक महत्वपूर्ण बग था जिसे पैच किया गया था, और हम सब कुछ के लिए सटीक संस्करणों का उपयोग कर रहे हैं, तो foo को ठीक करने से पहले अपडेट किया जाना चाहिए। अगर फू और बार में अलग-अलग रखरखाव होते हैं, या अगर फू को छोड़ दिया जाता है, तो इसमें कुछ समय लग सकता है और मुझे परियोजना को फोर्क करने की आवश्यकता हो सकती है (कुछ मैंने जावा-भूमि में एक से अधिक बार किया है)।

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

आशा है कि मदद करता है!

+0

ग्रेट स्पष्टीकरण, धन्यवाद! – user2061057

+0

मुझे यकीन नहीं है कि मैं आपके दूसरे अनुच्छेद का पालन करता हूं। एनपीएम में, क्या प्रत्येक मॉड्यूल को 'यह निर्भरता पेड़' नहीं मिलता है? दूसरे शब्दों में, एक पारस्परिक निर्भरता के 2 विरोधाभासी संस्करणों के साथ एनपीएम ओके नहीं है, क्योंकि यह उन्हें अलग रखता है? – jrahhali

+0

हां, लेकिन यदि 2 पैकेज समान निर्भरता साझा करते हैं, तो एनपीएम आपके नोड_मोड्यूल के शीर्ष स्तर पर केवल एक बार उस डिप्टी को इंस्टॉल कर सकता है। https://docs.npmjs.com/how-npm-works/npm3-nondet यह दस्तावेज़ npm3 के लिए है लेकिन यह अभी भी लागू होता है। – user2301179

संबंधित मुद्दे