क्या मुझे यार्न.लॉक और पैकेज-लॉक.जसन फाइलें करनी चाहिए?


118

हम अपने सभी नियतात्मक pkg स्थापनाओं के लिए यार्न का उपयोग कर रहे हैं, लेकिन उपयोगकर्ता को npm का उपयोग करने से नहीं रोकते हैं - मैं अनुमान लगा रहा हूं कि ये दोनों फाइलें समस्याएँ पैदा करेंगी। क्या आपके .gitignore dir में एक जोड़ा जाना चाहिए?


जवाबों:


148

हमेशा सामान्य रूप से निर्भरता लॉक फ़ाइलों को प्रतिबद्ध करें

जैसा कि कहीं और कवर किया गया है, निर्भरता लॉक फाइलें, जो कई पैकेज मैनेजमेंट सिस्टम (जैसे: कंपोजर और बंडलर ) द्वारा समर्थित हैं , को एंड-टू-चेन परियोजनाओं में कोडबेस के लिए प्रतिबद्ध होना चाहिए - ताकि प्रत्येक व्यक्ति उस परियोजना को चलाने की कोशिश कर रहा हो इसलिए साथ वास्तव में निर्भरता का परीक्षण किया सेट।

यह कम स्पष्ट है कि क्या लॉक फ़ाइलों को हमेशा उन पैकेजों में प्रतिबद्ध होना चाहिए जो अन्य परियोजनाओं में शामिल किए जाने का इरादा रखते हैं (जहां शिथिल निर्भरता वांछनीय हैं)। हालाँकि, यार्न और एनपीएम (जैसा कि @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)


यार्न परियोजना में इस मुद्दे पर चर्चा की गई:

दोनों अब बंद हो गए हैं।


1
बहुत बढ़िया जवाब। हालाँकि, आपकी बात के बारे में: "करने के लिए सबसे सुरक्षित बात यह है कि हर बार आपकी निर्भरता बदलने के लिए उन्हें उत्पन्न और प्रतिबद्ध करना होगा।" मुझे यकीन नहीं है कि ऐसा करने के लिए "सबसे सुरक्षित" चीज क्यों होगी। जैसा कि आपने उल्लेख किया है, यह बहुत संभावना है कि "दो फाइलें आउट-ऑफ-सिंक हो सकती हैं।" @ crimbo का जवाब इस समस्या को और अधिक विस्तार से बताता है।
TachyonVortex

मुझे लगता है कि यह एक अंतर हो सकता है कि क्या आप अपने प्रोजेक्ट को चलाने वाले सभी लोगों को नियंत्रित करते हैं। यदि आप टीम के मालिक हैं, तो सुनिश्चित करें, यार्न पर मानकीकरण करें और यार्न का उपयोग करें। लेकिन अगर यह एक ओपन सोर्स प्रोजेक्ट है (हमारे सभी लोगों की तरह) तो लोग आपके प्रोजेक्ट्स पर एनपीएम का उपयोग अच्छी तरह से कर सकते हैं, भले ही आप आंतरिक रूप से यार्न का उपयोग करते हों। तो सबसे सुरक्षित बात यह है कि यार्न औरलॉक और पैकेज-लॉक दोनों को सुनिश्चित करने के लिए एक स्वचालित प्रणाली का उपयोग करना होगा। सिंक में रहेगा। और पैकेज-लॉक.जसन पर स्विच करने के लिए यार्न पर दबाव भी डाला।
रॉबिन विंसलो

1
yarn import2018 में शुरू किया गया था। यार्न pkg.com/blog/2018/06/04/yarn-import-package-lock
कमजोर

18

आपको 1 निर्भरता ट्री लॉक फ़ाइल करनी चाहिए, लेकिन आपको दोनों को कमिट नहीं करना चाहिए। इसके साथ किसी प्रोजेक्ट को बनाने / विकसित करने के लिए यार्न या npm (दोनों नहीं) पर मानकीकरण की भी आवश्यकता होती है।

यहाँ यार्न लेख पर यार्न क्यों है। यदि आप यार्न पर मानकीकरण करते हैं तो यार्न को प्रतिबद्ध होना चाहिए।

यदि आप दोनों yarn.lockफ़ाइल करते हैं, और package-lock.jsonफ़ाइलें बहुत सारे तरीके हैं जो 2 फाइलें अलग-अलग निर्भरता वाले पेड़ प्रदान कर सकती हैं (भले ही यार्न और एनपीएम के पेड़ संकल्प एल्गोरिदम समान हों), और यह सुनिश्चित करने के लिए गैर-तुच्छ है कि वे वास्तव में प्रदान करते हैं एक ही जवाब। चूंकि यह गैर-तुच्छ है, इसलिए यह संभावना नहीं है कि दोनों फाइलों में एक ही निर्भरता के पेड़ को बनाए रखा जाएगा, और आप अलग-अलग व्यवहार नहीं चाहते हैं, इस पर निर्भर करता है कि निर्माण यार्न या एनपीएम का उपयोग करके किया गया था।

यदि और जब यार्न उपयोग yarn.lockकरने से जारी होता हैpackage-lock.json ( यहां मुद्दा ), तो कमिट करने के लिए लॉक फ़ाइल का विकल्प आसान हो जाता है, और हमें अब अलग-अलग बिल्ड के परिणामस्वरूप यार्न और एनपीएम के बारे में चिंता करने की ज़रूरत नहीं है। इस ब्लॉग पोस्ट के आधार पर , यह एक बदलाव है जिसकी हमें जल्द ही उम्मीद नहीं करनी चाहिए (ब्लॉग पोस्ट में yarn.lockऔर बीच के अंतर का भी वर्णन है package-lock.json


11

मैं उसी प्रश्न के बारे में सोच रहा था। यहाँ मेरे विचार हैं, आशा है कि यह मदद करता है:

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स्पष्ट रूप से बेकार है। अधिक, यह कष्टप्रद हो सकता है।


7

यहाँ मेरे अंगूठे का नियम है: यदि आप किसी एप्लिकेशन पर काम कर रहे हैं, तो लॉक फ़ाइल (ओं) को प्रतिबद्ध करें। यदि आप एक पुस्तकालय बनाए हुए हैं, तो इसे अपनी उपेक्षित सूची में जोड़ें। किसी भी तरह से आपको सटीक वीर्य श्रेणियों का उपयोग करना चाहिए package.jsonयेहुदा काट्ज़ ( कैश्ड ) ने एक महान विवरण लिखा है कि कब Gemfile.lock(रूबी की लॉक फाइल) करना है और कब नहीं। कम से कम tl; डॉ सेक्शन को पढ़ें।


लिंक टूट गया है।
जूहा सिरजला

धन्यवाद @ JuhaSyrjälä मैंने लेख का दूसरा लिंक जोड़ा।
राविंगजेनियस

एनपीएम या यार्न की अनदेखी सूची कहां है?
नीव

"उपेक्षा सूची" आपकी परियोजना के स्रोत भंडार (गिट, मर्क्यूरियल, तोड़फोड़) के लिए विशिष्ट होगी। गिट के मामले में, फ़ाइल को कहा जाता है .gitignore, और आमतौर पर परियोजना की जड़ में है।
राविंगजेनियस

4

तुम सही हो! दोनों को अनुमति देना npmऔर yarnउपयोग किया जाना मुद्दों का कारण बनने वाला है। इस लेख पर एक नज़र डालें ।

वर्तमान में, हम योजना बना, जो दोनों का उपयोग उपयोगकर्ताओं के लिए कुछ चेतावनियों को जोड़ने के लिए yarn और npmएक ही भंडार में पैकेज इंस्टॉल करने।

package-lock.jsonयदि आप भविष्य में भ्रम और संभावित स्थिरता के मुद्दों से बचने के लिए यार्न का उपयोग करने का निर्णय लेते हैं, तो हम आपको फ़ाइल को हटाने की अत्यधिक अनुशंसा करते हैं।

आप दोनों नहीं चाहते हो सकता है npmऔर yarnअपने पैकेज प्रबंधक के रूप में।


2

ये फ़ाइलें आपके टूल द्वारा प्रबंधित की जाती हैं, इसलिए यार्न का उपयोग करके यह प्रभावी रूप से अपडेट हो जाएगा package-lock.json –I लगता है कि दोनों फ़ाइलें ठीक काम करती हैं।

मुझे लगता है कि आपके उपयोगकर्ता के लिए सबसे महत्वपूर्ण है package-lock.json(I, उदाहरण के लिए, यार्न का उपयोग न करें) इसलिए यह एक है प्रतिबद्ध किया जाना है।

इसके लिए yarn.lock, यह निर्भर करता है कि आप अकेले काम करते हैं या किसी टीम में। अगर एकल, तो मुझे लगता है कि इसे करने की कोई आवश्यकता नहीं है। यदि आप एक टीम में काम करने की योजना बनाते हैं, तो आपको संभवतः इसे कम से कम तब तक करना चाहिए जब तक कि यार्न इसका समर्थन नहीं करता है करता

मुझे लगता है कि यार्न टीम अंततः उपयोग करना बंद कर देगी yarn.lockऔर package-json.lockइसके बजाय उपयोग करेगी, इस समय यह सरल the हो जाएगा


1
यार्न का उपयोग बंद नहीं किया था।
जयरोज़ो

0

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

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