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


304

yarn.lockआपके द्वारा प्रदर्शन करने के बाद यार्न एक फ़ाइल बनाता है yarn install

क्या यह भंडार या उपेक्षा के लिए प्रतिबद्ध होना चाहिए? ये किसके लिये है?


3
IMHO, यह सवाल (और नीचे दिए गए अधिकांश उत्तर) के सवाल को याद करने के कारण अधूरा है, "हमें यार्न की फाइल को कैसे और कब पुनर्जीवित करना चाहिए?"
मार्खू

1
क्या आप जानते हैं अब कैसे और कब?
जयरजो

@MarkHu ने इसे यहां पाया: यार्नपॉके ..com / lang / en / docs / yarnYour yarn.lock file is auto-generated and should be handled entirely by Yarn. As you add/upgrade/remove dependencies with the Yarn CLI, it will automatically update your yarn.lock file.
lock

जवाबों:


271

हां, आपको इसे चेक करना चाहिए, npm से माइग्रेटिंग देखें

यार्न आपके पैकेज की रूट डायरेक्टरी के भीतर एक यार्न.लॉक फ़ाइल उत्पन्न करेगा। आपको इस फ़ाइल को पढ़ने या समझने की आवश्यकता नहीं है - बस इसे स्रोत नियंत्रण में देखें।


33
अच्छा लगा। मैंने उनके डॉक्स से निम्नलिखित पाया है जो उत्तर देता है कि "यह किस लिए है?": "Npm क्लाइंट निर्भरता को नोड_modules निर्देशिका में गैर-निर्धारक रूप से स्थापित करता है। इसका मतलब है कि आदेश निर्भरता के आधार पर एक नोड_मॉडल की संरचना स्थापित की जाती है। निर्देशिका एक व्यक्ति से दूसरे व्यक्ति में भिन्न हो सकती है। ये अंतर "मेरी मशीन पर काम करने वाले कीड़े" पैदा कर सकते हैं जो शिकार करने में लंबा समय लेते हैं।
rlay3

13
जारी: "यार्न लॉकफाइल्स और एक इंस्टॉल एल्गोरिथ्म का उपयोग करके इन मुद्दों को हल करता है, जो नियतात्मक और विश्वसनीय है। ये लॉकफ़ाइल्स इंस्टॉल किए गए निर्भरता को एक विशिष्ट संस्करण में लॉक करते हैं, और सुनिश्चित करते हैं कि हर स्थापित परिणाम ठीक उसी फ़ाइल संरचना में है। सभी मशीनों में नोड_मॉड्यूल। "
rlay3

इसके बजाय "कोई लॉकफ़ाइल नहीं मिला" कहने के बजाय। इसे केवल "जेनरेटिंग यार्न.लॉक फाइल" कहना चाहिए। Duh :) यह एक त्रुटि नहीं है, लेकिन पूर्व त्रुटि की तरह लगता है। और उत्तरार्द्ध उलटे परिदृश्य में किसी के लिए भी पर्याप्त रूप से खतरनाक होगा, (जहां उन्हें यार्न.लॉक फ़ाइल की उम्मीद है, लेकिन स्पष्ट रूप से नहीं)।
अलेक्जेंडर मिल्स

7
मैं यार्न की सराहना करता हूं। हमारे प्रोजेक्ट को विशिष्ट पैकेज संस्करणों में लॉक किया जा रहा है, लेकिन मुझे लगता है कि "लॉक" शब्द का उपयोग दुर्भाग्यपूर्ण है। आमतौर पर लॉक फाइलें (जैसे .ldb ) भ्रष्टाचार को रोकने के लिए एक समय में एक प्रक्रिया में एक संसाधन को सीमित करने का एक साधन हैं, जिससे भ्रष्टाचार के अद्यतन का कारण बन सकता है। इस तरह की लॉक फाइलें निश्चित रूप से संस्करण नियंत्रण के लिए प्रतिबद्ध नहीं होनी चाहिए, जो संभवतः यार्न यॉक के बारे में भ्रम की स्थिति है।
एंटनी

2
मुझे वास्तव में यह वाक्यांश पसंद नहीं है "आपको इस फाइल को पढ़ने या समझने की आवश्यकता नहीं है"। यह आपके प्रोजेक्ट को बनाए रखने के लिए एक महत्वपूर्ण फ़ाइल है।
नाथन गोइंग

83

निर्भर करता है कि आपकी परियोजना क्या है:

  1. क्या आपका प्रोजेक्ट एक एप्लीकेशन है? तब: हाँ
  2. क्या आपका प्रोजेक्ट एक पुस्तकालय है? यदि हां: नहीं

इसका अधिक विस्तृत वर्णन इस गीथहब अंक में पाया जा सकता है जहां यार्न के रचनाकारों में से एक। कहते हैं:

Package.json मूल लेखक द्वारा वांछित इच्छित संस्करणों का वर्णन करता है, जबकि यार्न .lock किसी दिए गए एप्लिकेशन के लिए अंतिम ज्ञात-अच्छे कॉन्फ़िगरेशन का वर्णन करता है।

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


7
दूसरी ओर, क्या पुस्तकालय परियोजनाओं में लॉक फ़ाइल उनके संबंधित परीक्षणों की प्रजनन क्षमता को प्रभावित नहीं करेगी?
E_net4 का नाम बदला गया है

1
अगर मैंने आपका वर्णन सही ढंग से पढ़ा, तो "क्या आपका प्रोजेक्ट एक पुस्तकालय है?" "यदि आप चाहते हैं" के साथ उत्तर दिया जा सकता है। ऐसा लगता नहीं है कि डाउनसाइड्स हैं, लेकिन यह उपयोगी हो सकता है, यदि आपके पास जटिल निर्भरताएं हैं और आप चाहते हैं कि आपके प्रत्येक डेवलपर को समान बिल्ड और टेस्ट स्क्रिप्ट्स मिलें। सही?
पिपो

4
चूंकि आपकी लाइब्रेरी के किसी भी उपयोगकर्ता के लिए लॉक फ़ाइल का सम्मान नहीं किया जाएगा, तो उस पर भरोसा करते हुए लाइब्रेरी विकसित करने से सुरक्षा का झूठा
एहसास

1
डार्ट में pubspec.yaml और pubspec.lock के साथ एक ही सिस्टम है और उत्तर में जैसा है वैसा ही सुझाता है। देखें इस सवाल और इस प्रलेखन प्रविष्टि।
जोनास केलो

16
कृपया यार्न के आधिकारिक ब्लॉग में इस प्रविष्टि को देखें: सभी प्रोजेक्ट्स पर लॉक फाइलें होनी चाहिए
E_net4 का नाम बदलकर हर बार

66

मैं देख रहा हूं कि ये एक में दो अलग-अलग प्रश्न हैं। मुझे दोनों का जवाब दो।

क्या आपको रेपो में फाइल करनी चाहिए?

हाँ। जैसा कि क्यूकीजेर के उत्तर में बताया गया है कि इस फाइल को रेपो में शामिल करने के लिए माइग्रेशन गाइड में सिफारिश की गई है । यह समझने के लिए पढ़ें कि आपको इसे करने की आवश्यकता क्यों है।

क्या है yarn.lock?

यह एक ऐसी फाइल है जो प्रत्येक पैकेज के लिए चेकसम के साथ आपकी परियोजना के लिए सटीक निर्भरता संस्करणों को संग्रहीत करती है। यह आपकी निर्भरता के लिए स्थिरता प्रदान करने का यार्न का तरीका है।

यह समझने के लिए कि इस फाइल की आवश्यकता क्यों है, आपको यह समझने की आवश्यकता है कि मूल एनपीएम के पीछे क्या समस्या थी package.json। जब आप पैकेज स्थापित करते हैं, तो एनपीएम एक विशिष्ट संशोधन (सेवर) के बजाय एक निर्भरता के अनुमत संशोधनों की श्रेणी को संग्रहीत करेगा। एनपीएम निर्दिष्ट सीमा (यानी गैर-ब्रेकिंग पैच अपडेट) के भीतर निर्भरता के निर्भरता नवीनतम संस्करण को अपडेट करने की कोशिश करेगा। इस दृष्टिकोण के साथ दो समस्याएं हैं।

  1. निर्भरता के लेखक पैच संस्करण अपडेट जारी कर सकते हैं, जबकि वास्तव में आपके प्रोजेक्ट को प्रभावित करने वाले ब्रेकिंग परिवर्तन को पेश करेंगे।

  2. npm installअलग-अलग समय पर चलने वाले दो डेवलपर्स को निर्भरता के विभिन्न सेट मिल सकते हैं। जिसके कारण एक बग दो समान वातावरणों पर प्रजनन योग्य नहीं हो सकता है। यह उदाहरण के लिए CI सर्वरों के लिए बिल्ड स्थिरता मुद्दों का कारण हो सकता है।

दूसरी ओर यार्न अधिकतम भविष्यवाणी का मार्ग लेता है। यह सटीक निर्भरता संस्करणों yarn.lockको बचाने के लिए फ़ाइल बनाता है । यार्न में उस फ़ाइल के होने से संस्करणों को हल करने के बजाय संग्रहीत संस्करणों का उपयोग किया जाएगा । यह रणनीति गारंटी देती है कि ऊपर वर्णित कोई भी समस्या नहीं है।yarn.lockpackage.json

yarn.lockके समान है npm-shrinkwrap.jsonजो npm shrinkwrapकमांड द्वारा बनाया जा सकता है । इन दो फ़ाइलों के बीच अंतर को समझाते हुए इस उत्तर को जांचें ।


1
लेकिन मैं देख yarn.lockरहा हूं कि अभी और फिर अपडेट किया जा रहा है, क्या आप जानते हैं कि ऐसा क्यों और कब yarnहोता है?
जयरोज़ो

1
यार्न अंक # 4379 और # 4147 सुझाव देता है कि कई मामलों में yarnअपडेट yarn.lock, जिसमें yarn installपैकेज में बदलाव के बिना चल रहा है । Windows में चल रहे यार्न को यार्न में परिवर्तित करने के लिएyarn install --frozen-lockfile सुझाव के अनुसार उपयोग करना। (या इसके माध्यम से कॉन्फ़िगर करना ) सबसे अच्छा शर्त की तरह लगता है। .yarnrc
लॉरी हार्पफ

npm आजकल एक package-lock.jsonऔर एक है npm ci। यही कारण है कि कार्यप्रवाह अनुरूप यार्न की है yarn.lockऔर yarn install --frozen-lockfile
k0pernikus

10

मुझे लगता है कि हां, क्योंकि यार्न का अपना यार्न.लॉक फ़ाइल है: https://github.com/yarnpkg/yarn

यह नियतात्मक पैकेज निर्भरता संकल्प के लिए उपयोग किया जाता है।


8

तुम्हे करना चाहिए:

  1. इसे रिपॉजिटरी में जोड़ें और इसे कमिट करें
  2. स्थानीय रूप से और CI बिल्ड सर्वर पर एक डिफ़ॉल्ट के रूप में उपयोग yarn install --frozen-lockfileऔर नहीं yarn install

(मैंने फ्रोजन-लॉकफाइल डिफ़ॉल्ट व्यवहार करने के लिए मामला बनाने के लिए यार्न के इश्यू ट्रैकर पर एक टिकट खोला, # 4147 देखें )।


फ़ाइल frozen-lockfileमें ध्वज को सेट न करने के लिए सावधान रहें .yarnrcक्योंकि इससे आप पैकेज.जॉन और यार्न.लॉक फ़ाइल को सिंक करने में सक्षम होंगे। जीथूब पर संबंधित यार्न का मुद्दा देखें


yarn installअपने यार्न को अनलॉक कर सकते हैं। अप्रत्याशित रूप से , रिपीटेबल के यार्न के दावे शून्य और शून्य बनाता है। आपको केवल yarn installयार्न आरंभ करने और इसे अपडेट करने के लिए उपयोग करना चाहिए ।

इसके अलावा, esp। बड़ी टीमों में, आप यार्न लॉक में बदलाव के चारों ओर केवल इसलिए बहुत शोर कर सकते हैं क्योंकि एक डेवलपर अपनी स्थानीय परियोजना स्थापित कर रहा था।

अधिक जानकारी के लिए, npm के पैकेज- lock.json के बारे में मेरे जवाब पर पढ़ें जो यहां भी लागू होता है।


यह भी हाल ही में यार्न स्थापित करने के लिए डॉक्स में स्पष्ट किया गया था :

yarn install

स्थानीय नोड_मॉडल्स फ़ोल्डर में package.json के भीतर सूचीबद्ध सभी निर्भरताएं स्थापित करें।

yarn.lockफ़ाइल के रूप में इस का उपयोग किया जाता है:

  • यदि यार्न .लॉक मौजूद है और पैकेज.जॉन में सूचीबद्ध सभी निर्भरता को पूरा करने के लिए पर्याप्त है, यार्न।लॉक में दर्ज किए गए सटीक संस्करण स्थापित किए गए हैं, और यार्न ।लॉक अपरिवर्तित होंगे। यार्न नए संस्करणों के लिए जाँच नहीं करेगा।
  • यदि यार्न .लॉक अनुपस्थित है, या पैकेज में सूचीबद्ध सभी निर्भरताओं को पूरा करने के लिए पर्याप्त नहीं है। उदाहरण के लिए (उदाहरण के लिए, यदि आप मैन्युअल रूप से package.json पर निर्भरता जोड़ते हैं), यार्न उपलब्ध नवीनतम संस्करणों के लिए दिखता है जो पैकेज में बाधाओं को संतुष्ट करते हैं। .json। परिणाम यार्न को लिखे गए हैं।

यदि आप यार्न को सुनिश्चित करना चाहते हैं। अपडेट अपडेट नहीं है, तो उपयोग करें --frozen-lockfile.


जबकि सच है, केवल समय मुझे लगता है कि कर सकते हैं होता है कि राशि का उपयोग करने के --frozen-lockfileअगर किसी को मैन्युअल रूप से बाद में चलने के बिना package.json अद्यतन है yarn installऔर अद्यतन करने से। इसलिए एक CI उस झंडे का उपयोग करना चाह सकता है, लेकिन डेवलपर्स को ऐसा नहीं करना चाहिए क्योंकि यह मुद्दों को छुपाता है।
21

@jkrehm मुद्दे छुपाने से आप पर निर्भर करता है। मुझे अप्रत्याशित रूप से बदली गई yarn.lockफाइलों से yarn install, या तो पुल अनुरोधों को ब्लोट करने, या अनावश्यक मर्ज संघर्षों के कारण, या एक टूटी हुई लाइब्रेरी को खींचकर अधिक परेशानी हुई । (केवल इसलिए कि एक पुस्तकालय सेमर का उपयोग करता है, इसका मतलब यह नहीं है कि एक पैच / मामूली अपडेट आपके ऐप को नहीं तोड़ देगा - मैं वहां गया हूं)। मुझे लगता है कि अद्यतन yarn.lockकरना केवल एक मैनुअल कदम होना चाहिए, यही कारण है कि मैं अपने देव मशीन पर भी भरोसा करता हूं yarn install --frozen-lockfile(और npm ciएनपीएम परियोजनाओं पर) क्योंकि यह विश्वसनीय और निर्धारक है।
k0pernikus

1
मुझे कभी भी yarn.lockअप्रत्याशित रूप से अपडेट होने के साथ कोई समस्या नहीं हुई है (अक्टूबर 2016 के बाद से इसका उपयोग किया गया था)। यह हमेशा एक उपयोगकर्ता है जो मैन्युअल रूप से कुछ कर रहा है या एक घटिया पोस्ट-इंस्टॉल स्क्रिप्ट है। यही कारण है कि मैं एनपीएम पर एनपीआर को प्राथमिकता देता हूं (एनपीएम किसी भी ऑल टाइम को अपडेट करता है जो वह चाहता है)। मुझे लगता है कि मैं उन मुद्दों पर नहीं चलने के लिए खुद को भाग्यशाली समझूंगा।
जेकरेम

5

मेरे अनुभव से मैं कहूँगा हाँ हमें yarn.lockफ़ाइल करना चाहिए । यह सुनिश्चित करेगा कि, जब अन्य लोग आपके प्रोजेक्ट का उपयोग करेंगे तो उन्हें वैसी ही निर्भरता मिलेगी जैसी आपकी परियोजना से अपेक्षित थी।

डॉक्टर से

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

यह तर्क हो सकता है, कि हम इसे बदल कर प्राप्त कर सकते हैं ^के साथ --। हां हम कर सकते हैं, लेकिन सामान्य तौर पर, हमने देखा है कि अधिकांश npmपैकेज ^संकेतन के साथ आते हैं , और हमें स्थैतिक निर्भरता संस्करण को सुनिश्चित करने के लिए मैन्युअल रूप से नोटेशन को बदलना होगा। लेकिन अगर आप उपयोग करते हैं, तोyarn.lock होगा तो यह प्रोग्राम आपके सही संस्करण को सुनिश्चित करेगा।

जैसा कि एरिक इलियट ने यहां कहा

.Gitignore यार्न मत करो। यह "मेरी मशीन पर काम करता है" बग से बचने के लिए निर्धारक निर्भरता संकल्प सुनिश्चित करना है।


3

हाँ, आपको यह करना चाहिए। यार्न.लॉक फ़ाइल के बारे में अधिक जानकारी के लिए, यहां आधिकारिक डॉक्स देखें


3

हाँ! yarn.lockऐसे किसी भी डेवलपर की जांच होनी चाहिए जो निर्भरता स्थापित करता है, ठीक उसी आउटपुट को प्राप्त करें! साथ NPM [अक्टूबर 2016 में उपलब्ध था] , उदाहरण के लिए, आप एक हो सकता है patchसंस्करण (कहना 1.2.0) स्थानीय स्तर पर स्थापित करते हुए एक नया डेवलपर एक ताजा चल रहा installएक अलग संस्करण (1.2.1) मिल सकता है।


1
आपके द्वारा उल्लिखित npm व्यवहार इस बात पर निर्भर करता है कि आप अपनी निर्भरता को कैसे बचाते हैं। यदि आप --save-exactnpm का उपयोग करते समय बचत करते हैं, तो आप उसी व्यवहार को प्राप्त कर सकते हैं।
एलिकॉन

4
@ AlicanC मुझे नहीं लगता कि यह इतना आसान है। मेरा मानना ​​है कि यार्न (एक प्रतिबद्ध लॉक फ़ाइल के माध्यम से) पैकेज के एक ही संस्करण और उनके सभी निर्भरता की गारंटी देगा । यह कुछ ऐसा है जो एनपीएम के साथ हमेशा एक समस्या रही है, क्योंकि एक निर्भरता की निर्भरता को एक विशिष्ट संस्करण में पिन नहीं किया जा सकता है, इसलिए एक नई स्थापना विभिन्न निचले-स्तर की निर्भरता में खींच सकती है। एनपीएम संकोचन को इस मुद्दे को कुछ हद तक हल करना चाहिए था, लेकिन यह हमेशा मुश्किल था और बहुत बार यह सही ढंग से काम नहीं करता है।
नेक्स्टजेनटेक

@nextgentech यदि उस स्थिति में मैं यह कैसे सुनिश्चित करूं कि निर्भरता की स्थिति ठीक से अपडेट की गई है। मान लीजिए अगर मेरे पास एक मुख्य पैकेज है जिसमें कुछ (3 कहते हैं) निर्भर पैकेज हैं। मैं अपने मुख्य पैकेज में बदलाव के लिए देखूंगा और इसे पैकेज में अपडेट करूंगा। लेकिन अगर 3 उप पैकेज में से कोई भी उनके द्वारा अपडेट किया जाता है, तो मुझे कैसे परिवर्तन मिलेंगे? लॉक फ़ाइल के कारण उन निर्भरताएँ सही अद्यतन नहीं किया जाएगा?
प्रगतेश्वरन

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

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