आपके पास शायद कुछ ऐसा है:
"typescript":"~2.1.6"
आपके package.json
npm में नवीनतम माइनर संस्करण में अपडेट किया गया है, आपके मामले में2.4.1
संपादित करें: ओपी से प्रश्न
लेकिन यह स्पष्ट नहीं करता है कि "npm इंस्टॉल" लॉक फ़ाइल को क्यों बदलेगा। क्या लॉक फ़ाइल एक प्रतिलिपि प्रस्तुत करने योग्य निर्माण बनाने के लिए नहीं है? यदि हां, तो सेमर मूल्य की परवाह किए बिना, इसे अभी भी उसी 2.1.6 संस्करण का उपयोग करना चाहिए।
उत्तर:
यह आपके पूर्ण निर्भरता के पेड़ को बंद करने का इरादा है। आइए बताते हैं typescript v2.4.1
आवश्यकता widget ~v1.0.0
। जब आप npm इसे पकड़ लेते हैं widget v1.0.0
। बाद में अपने साथी डेवलपर (या CI बिल्ड) पर एक npm इंस्टॉल और हो जाता है, typescript v2.4.1
लेकिन widget
इसे अपडेट कर दिया गया है widget v1.0.1
। अब आपका नोड मॉड्यूल सिंक से बाहर है। यह वही है जो package-lock.json
रोकता है।
या अधिक आम तौर पर:
एक उदाहरण के रूप में, विचार करें
पैकेज ए:
{"नाम": "ए", "संस्करण": "0.1.0", "निर्भरता": {"बी": "<0.1.0"}}
पैकेज बी:
{"नाम": "बी", "संस्करण": "0.0.1", "निर्भरता": {"C": "<0.1.0"}}
और पैकेज सी:
{"नाम": "सी", "संस्करण": "0.0.1"}
यदि ये रजिस्ट्री में ए, बी और सी के केवल संस्करण हैं, तो एक सामान्य एनपीएम स्थापित ए स्थापित होगा:
A@0.1.0 - B@0.0.1 - C@0.0.1
हालाँकि, यदि B@0.0.2 प्रकाशित हुआ है, तो एक नया npm स्थापित होगा A स्थापित होगा:
A@0.1.0 - B@0.0.2 - C@0.0.1 ने माना कि नए संस्करण ने B की निर्भरता को संशोधित नहीं किया है। बेशक, बी के नए संस्करण में सी का नया संस्करण और नई निर्भरता के किसी भी संख्या को शामिल किया जा सकता है। यदि ऐसे परिवर्तन अवांछनीय हैं, तो A का लेखक B@0.0.1 पर निर्भरता निर्दिष्ट कर सकता है। हालाँकि, यदि A का लेखक और B का लेखक एक ही व्यक्ति नहीं हैं, तो A के लेखक के पास यह कहने का कोई तरीका नहीं है कि वह C के नए प्रकाशित संस्करणों में तब खींचना नहीं चाहता है जब B बिल्कुल नहीं बदला है।
ओपी प्रश्न 2: इसलिए मुझे यह देखने दें कि क्या मैं सही तरीके से समझता हूं। आप क्या कह रहे हैं कि लॉक फ़ाइल द्वितीयक निर्भरता के संस्करणों को निर्दिष्ट करती है, लेकिन फिर भी शीर्ष स्तर की निर्भरता निर्धारित करने के लिए package.json के फजी मिलान पर निर्भर करती है। क्या यह सही है?
उत्तर: नहीं। पैकेज-लॉक पूरे पैकेज ट्री को लॉक करता है, जिसमें वर्णित मूल पैकेज भी शामिल है package.json
। यदि आपके में typescript
बंद है , तो इसे उस तरह से रहना चाहिए जब तक कि इसे बदल न दिया जाए। और कहते हैं कि कल रिलीज संस्करण । अगर मैं आपकी शाखा की जांच करूं और चलाऊं, तो npm लॉकफाइल का सम्मान करेगा और इंस्टॉल करेगा ।2.4.1
package-lock.json
typescript
2.4.2
npm install
2.4.1
अधिक पर package-lock.json
:
package-lock.json स्वचालित रूप से किसी भी ऑपरेशन के लिए उत्पन्न होता है जहाँ npm या तो नोड_मॉड्यूल्स ट्री, या package.json को संशोधित करता है। यह सटीक पेड़ का वर्णन करता है जो उत्पन्न किया गया था, जैसे कि बाद में स्थापित मध्यवर्ती निर्भरता अपडेट की परवाह किए बिना, समान पेड़ उत्पन्न करने में सक्षम हैं।
यह फ़ाइल स्रोत रिपॉजिटरी में प्रतिबद्ध है, और विभिन्न उद्देश्यों के लिए काम करती है:
एक निर्भरता के पेड़ के एकल प्रतिनिधित्व का वर्णन करें जैसे कि टीम के साथी, तैनाती और निरंतर एकीकरण की गारंटी एक ही निर्भरता को स्थापित करने के लिए दी जाती है।
उपयोगकर्ताओं को "टाइम-ट्रैवल" करने के लिए नोड_मॉडल्स के पिछले राज्यों को एक निर्देशिका प्रदान करने की सुविधा उपलब्ध कराएं।
पठनीय स्रोत नियंत्रण के माध्यम से वृक्ष परिवर्तनों की अधिक दृश्यता की सुविधा के लिए।
और पहले से स्थापित पैकेजों के लिए दोहराया मेटाडेटा प्रस्तावों को छोड़ने के लिए npm की अनुमति देकर स्थापना प्रक्रिया का अनुकूलन करें।
https://docs.npmjs.com/files/package-lock.json