हम अपने सभी नियतात्मक pkg स्थापनाओं के लिए यार्न का उपयोग कर रहे हैं, लेकिन उपयोगकर्ता को npm का उपयोग करने से नहीं रोकते हैं - मैं अनुमान लगा रहा हूं कि ये दोनों फाइलें समस्याएँ पैदा करेंगी। क्या आपके .gitignore dir में एक जोड़ा जाना चाहिए?
हम अपने सभी नियतात्मक pkg स्थापनाओं के लिए यार्न का उपयोग कर रहे हैं, लेकिन उपयोगकर्ता को npm का उपयोग करने से नहीं रोकते हैं - मैं अनुमान लगा रहा हूं कि ये दोनों फाइलें समस्याएँ पैदा करेंगी। क्या आपके .gitignore dir में एक जोड़ा जाना चाहिए?
जवाबों:
जैसा कि कहीं और कवर किया गया है, निर्भरता लॉक फाइलें, जो कई पैकेज मैनेजमेंट सिस्टम (जैसे: कंपोजर और बंडलर ) द्वारा समर्थित हैं , को एंड-टू-चेन परियोजनाओं में कोडबेस के लिए प्रतिबद्ध होना चाहिए - ताकि प्रत्येक व्यक्ति उस परियोजना को चलाने की कोशिश कर रहा हो इसलिए साथ वास्तव में निर्भरता का परीक्षण किया सेट।
यह कम स्पष्ट है कि क्या लॉक फ़ाइलों को हमेशा उन पैकेजों में प्रतिबद्ध होना चाहिए जो अन्य परियोजनाओं में शामिल किए जाने का इरादा रखते हैं (जहां शिथिल निर्भरता वांछनीय हैं)। हालाँकि, यार्न और एनपीएम (जैसा कि @Cyrille द्वारा कवर किया गया है) दोनों ही होशियारी से अनदेखा करते हैं yarn.lock
और package-lock.json
क्रमशः जहाँ आवश्यक हो, इन लॉफ़िले को हमेशा सुरक्षित रखना सुरक्षित बनाता है।
इसलिए आपको हमेशा कम से कम एक yarn.lock
या इसकेpackage-lock.json
आधार पर प्रतिबद्ध होना चाहिए कि आप किस पैकेज मैनेजर का उपयोग कर रहे हैं।
वर्तमान में हम दो अलग-अलग पैकेज प्रबंधन प्रणाली है, जो दोनों स्थापित निर्भरता का एक ही सेट से package.json
है, लेकिन जो पैदा करते हैं और दो अलग अलग lockfiles से पढ़ें। एनपीएम 5 उत्पन्न करता है package-lock.json
, जबकि यार्न उत्पन्न करता है yarn.lock
।
यदि आप प्रतिबद्ध हैं, package-lock.json
तो आप एनपीएम 5 के साथ अपनी निर्भरता स्थापित करने वाले लोगों के समर्थन में निर्माण कर रहे हैं। यदि आप प्रतिबद्ध हैं yarn.lock
, तो आप यार्न के साथ निर्भरता स्थापित करने वाले लोगों के समर्थन में निर्माण कर रहे हैं।
आप प्रतिबद्ध करने के लिए चुनते हैं yarn.lock
या package-lock.json
या दोनों ही यार्न या NPM 5 या दोनों का उपयोग कर रहे अपनी परियोजना पर विकसित करने के लिए उन पर निर्भर करता। यदि आपका प्रोजेक्ट ओपन-सोर्स है, तो करने के लिए सबसे अधिक समुदाय-हितैषी बात शायद दोनों के लिए होगी yarn.lock
और यह सुनिश्चित करने और package-lock.json
हमेशा सिंक में रहने के लिए एक स्वचालित प्रक्रिया होगी ।
अद्यतन: यार्न ने अब एक import
कमांड पेश किया है जो एक yarn.lock
फ़ाइल से एक package-lock.json
फ़ाइल उत्पन्न करेगा । यह दो फ़ाइलों को सिंक में रखने के लिए उपयोगी हो सकता है। (साभार @weakish)
यार्न परियोजना में इस मुद्दे पर चर्चा की गई:
दोनों अब बंद हो गए हैं।
yarn import
2018 में शुरू किया गया था। यार्न pkg.com/blog/2018/06/04/yarn-import-package-lock
आपको 1 निर्भरता ट्री लॉक फ़ाइल करनी चाहिए, लेकिन आपको दोनों को कमिट नहीं करना चाहिए। इसके साथ किसी प्रोजेक्ट को बनाने / विकसित करने के लिए यार्न या npm (दोनों नहीं) पर मानकीकरण की भी आवश्यकता होती है।
यदि आप दोनों yarn.lock
फ़ाइल करते हैं, और package-lock.json
फ़ाइलें बहुत सारे तरीके हैं जो 2 फाइलें अलग-अलग निर्भरता वाले पेड़ प्रदान कर सकती हैं (भले ही यार्न और एनपीएम के पेड़ संकल्प एल्गोरिदम समान हों), और यह सुनिश्चित करने के लिए गैर-तुच्छ है कि वे वास्तव में प्रदान करते हैं एक ही जवाब। चूंकि यह गैर-तुच्छ है, इसलिए यह संभावना नहीं है कि दोनों फाइलों में एक ही निर्भरता के पेड़ को बनाए रखा जाएगा, और आप अलग-अलग व्यवहार नहीं चाहते हैं, इस पर निर्भर करता है कि निर्माण यार्न या एनपीएम का उपयोग करके किया गया था।
यदि और जब यार्न उपयोग yarn.lock
करने से जारी होता हैpackage-lock.json
( यहां मुद्दा ), तो कमिट करने के लिए लॉक फ़ाइल का विकल्प आसान हो जाता है, और हमें अब अलग-अलग बिल्ड के परिणामस्वरूप यार्न और एनपीएम के बारे में चिंता करने की ज़रूरत नहीं है। इस ब्लॉग पोस्ट के आधार पर , यह एक बदलाव है जिसकी हमें जल्द ही उम्मीद नहीं करनी चाहिए (ब्लॉग पोस्ट में yarn.lock
और बीच के अंतर का भी वर्णन है package-lock.json
।
मैं उसी प्रश्न के बारे में सोच रहा था। यहाँ मेरे विचार हैं, आशा है कि यह मदद करता है:
NPM पैकेज-lock.json प्रलेखन निम्नलिखित कहते हैं:
package-lock.json स्वचालित रूप से किसी भी ऑपरेशन के लिए उत्पन्न होता है जहाँ npm या तो नोड_मॉड्यूल्स ट्री, या package.json को संशोधित करता है। यह सटीक पेड़ का वर्णन करता है जो उत्पन्न किया गया था, जैसे कि बाद में स्थापित मध्यवर्ती निर्भरता अपडेट की परवाह किए बिना, समान पेड़ उत्पन्न करने में सक्षम हैं।
यह बहुत अच्छा है क्योंकि यह "मेरी मशीन पर काम करता है" प्रभाव को रोकता है।
इस फ़ाइल के बिना, यदि आप npm install --save A
, एनपीएम "A": "^1.2.3"
आपके लिए जोड़ देगा package.json
। किसी और को चलाता है जब npm install
अपनी परियोजना पर, यह संभव है कि संस्करण 1.2.4
के A
जारी की गई है। चूंकि यह नवीनतम उपलब्ध संस्करण है जो आपके में निर्दिष्ट सेमर श्रेणी को संतुष्ट करता है package.json
, यह इस संस्करण को स्थापित करेगा। लेकिन क्या होगा अगर इस संस्करण में एक नया बग पेश किया जाए? इस व्यक्ति के पास एक समस्या होगी जिसे आप पुन: उत्पन्न नहीं कर सकते क्योंकि आपके पास पिछले संस्करण है, बिना किसी बग के।
अपनी node_modules
निर्देशिका की स्थिति को ठीक करके , package-lock.json
फ़ाइल इस समस्या को रोकती है क्योंकि सभी के पास हर पैकेज के समान संस्करण होंगे।
लेकिन, क्या होगा अगर आप एक npm मॉड्यूल लिख रहे हैं और प्रकाशित कर रहे हैं? प्रलेखन निम्नलिखित कहता है:
पैकेज- lock.json के बारे में एक प्रमुख विवरण यह है कि इसे प्रकाशित नहीं किया जा सकता है, और इसे अनदेखा किया जाएगा यदि किसी भी स्थान पर टॉपवेल पैकेज के अलावा अन्य जगह पाया जाता है।
इसलिए, भले ही आप इसे प्रतिबद्ध करते हैं, जब उपयोगकर्ता आपके मॉड्यूल को स्थापित करता है, तो उसे package-lock.json
फ़ाइल नहीं मिलेगी , लेकिन केवल package.json
फ़ाइल। तो npm नवीनतम संस्करण स्थापित करेगा जो आपके सभी आश्रितों की सेमर श्रेणियों को संतुष्ट करता है। इसका मतलब यह है कि आप हमेशा अपने मॉड्यूल को अपनी निर्भरता के शोधों के साथ परीक्षण करना चाहते हैं, न कि आपके द्वारा स्थापित मॉड्यूल को लिखने के दौरान। तो, उस मामले में, package-lock.json
स्पष्ट रूप से बेकार है। अधिक, यह कष्टप्रद हो सकता है।
यहाँ मेरे अंगूठे का नियम है: यदि आप किसी एप्लिकेशन पर काम कर रहे हैं, तो लॉक फ़ाइल (ओं) को प्रतिबद्ध करें। यदि आप एक पुस्तकालय बनाए हुए हैं, तो इसे अपनी उपेक्षित सूची में जोड़ें। किसी भी तरह से आपको सटीक वीर्य श्रेणियों का उपयोग करना चाहिए package.json
। येहुदा काट्ज़ ( कैश्ड ) ने एक महान विवरण लिखा है कि कब Gemfile.lock
(रूबी की लॉक फाइल) करना है और कब नहीं। कम से कम tl; डॉ सेक्शन को पढ़ें।
.gitignore
, और आमतौर पर परियोजना की जड़ में है।
तुम सही हो! दोनों को अनुमति देना npm
और yarn
उपयोग किया जाना मुद्दों का कारण बनने वाला है। इस लेख पर एक नज़र डालें ।
वर्तमान में, हम योजना बना, जो दोनों का उपयोग उपयोगकर्ताओं के लिए कुछ चेतावनियों को जोड़ने के लिए
yarn
औरnpm
एक ही भंडार में पैकेज इंस्टॉल करने।
package-lock.json
यदि आप भविष्य में भ्रम और संभावित स्थिरता के मुद्दों से बचने के लिए यार्न का उपयोग करने का निर्णय लेते हैं, तो हम आपको फ़ाइल को हटाने की अत्यधिक अनुशंसा करते हैं।
आप दोनों नहीं चाहते हो सकता है npm
और yarn
अपने पैकेज प्रबंधक के रूप में।
ये फ़ाइलें आपके टूल द्वारा प्रबंधित की जाती हैं, इसलिए यार्न का उपयोग करके यह प्रभावी रूप से अपडेट हो जाएगा package-lock.json
–I लगता है कि दोनों फ़ाइलें ठीक काम करती हैं।
मुझे लगता है कि आपके उपयोगकर्ता के लिए सबसे महत्वपूर्ण है package-lock.json
(I, उदाहरण के लिए, यार्न का उपयोग न करें) इसलिए यह एक है प्रतिबद्ध किया जाना है।
इसके लिए yarn.lock
, यह निर्भर करता है कि आप अकेले काम करते हैं या किसी टीम में। अगर एकल, तो मुझे लगता है कि इसे करने की कोई आवश्यकता नहीं है। यदि आप एक टीम में काम करने की योजना बनाते हैं, तो आपको संभवतः इसे कम से कम तब तक करना चाहिए जब तक कि यार्न इसका समर्थन नहीं करता है करता
मुझे लगता है कि यार्न टीम अंततः उपयोग करना बंद कर देगी yarn.lock
और package-json.lock
इसके बजाय उपयोग करेगी, इस समय यह सरल the हो जाएगा
नहीं, दोनों लॉक फ़ाइलों का एक साथ उपयोग करने से सबसे अधिक बार आपके निर्भरता के पेड़ में विसंगतियों का परिणाम होगा, खासकर जब एक टीम पर सहयोग करना। एक लॉक या दूसरे को अनदेखा करना एक सरल उपाय है। बस सुनिश्चित करें कि आपकी टीम इस बदलाव को समझती है और इससे सहमत है।