Yarn: विकास / परीक्षण के लिए पैकेज सहकर्मी निर्भरता स्थापित करने के लिए एक साधन जोड़ें

को निर्मित 27 अक्तू॰ 2016  ·  72टिप्पणियाँ  ·  स्रोत: yarnpkg/yarn

क्या आप एक _feature_ या एक _bug_ की रिपोर्ट करना चाहते हैं?
फ़ीचर

वर्तमान व्यवहार क्या है?
एन / ए

अपेक्षित व्यवहार क्या है?
CLI कमांड yarn install --peer जो package.json में निर्दिष्ट सहकर्मी निर्भरताएं स्थापित करेगा। इस तरह से विकास / परीक्षण साथियों का उपयोग प्रतिक्रिया / ng2 / ग्रंट जैसे कर सकते हैं।

cat-feature help wanted triaged

सबसे उपयोगी टिप्पणी

+1 यह लाइब्रेरी लेखकों के लिए महत्वपूर्ण है

सभी 72 टिप्पणियाँ

@ jpollard- सीएस मैं एक सहकर्मी निर्भरता के रूप में एक पैकेज जोड़ने का उल्लेख नहीं कर रहा हूं, मैं वर्तमान में सहकर्मी निर्भरता के रूप में सूचीबद्ध सभी पैकेज स्थापित करने के लिए एक साधन होने का उल्लेख कर रहा हूं।
अन्यथा प्लगइन्स विकसित करने का एक व्यवहार्य साधन नहीं है।

npm install
पैकेज.जॉन निर्भरता अनुभाग में घोषित सभी पैकेज स्थापित करेगा।

yarn add --peer
मैंने पैकेज में घोषित सभी पैकेजों को स्थापित करने की उम्मीद की थी।

क्या सहकर्मी निर्भरता में घोषित पैकेज स्थापित करने का कोई तरीका है?

मेरा उपयोग मामला एक प्रतिक्रिया देशी मॉड्यूल का विकास / परीक्षण है।

यहाँ NPM समस्या है, जिसे उन्होंने बंद किया: https://github.com/npm/npm/issues/11213

स्पष्ट रूप से एनपीएम देवों के लिए महत्वपूर्ण नहीं है।

+1 यह लाइब्रेरी लेखकों के लिए महत्वपूर्ण है

मैंने पहले ही एनपीएम मुद्दे पर यह लिखा था, लेकिन यार्न लोगों के लिए:

मैंने लिखा है कि एक cli प्रोग्राम पैकेज के सहकर्मी निर्भरता स्थापित करता है:

# If you're using npm
npm install -g install-peerdeps

# If you're using yarn
yarn global add install-peerdeps

cd my-project-directory

install-peerdeps <package>[@<version>]

# for example
install-peerdeps @angular/core
# will install all of angular's peerdeps

यदि आपको इससे कोई समस्या है, तो कृपया रेपो पर एक मुद्दा खोलें!

@nathanhleung , वह पैकेज आपके सभी आश्रितों की सहकर्मी निर्भरता को स्थापित करता प्रतीत होता है। यह टिकट किस बारे में काफी है। यह आपके अपने पैकेज के सहकर्मी निर्भरता स्थापित करने के बारे में है।

मैंने इसे करने के लिए एक पैकेज के साथ तय किया है कि https://www.npmjs.com/package/@team-griffin/install-self-peers

@nathanhleung आप चट्टानों।

हम्म ... अगर किसी को विकास / परीक्षण के लिए निर्भरता चाहिए, तो क्या उन्हें devDependencies तहत नहीं लाना चाहिए? बम या किसी चीज को गिराने की कोशिश नहीं ...

@nikolakanacki पूरी तरह से देखें कि आप कहां से आ रहे हैं, मुझे लगता है कि अजीबता यह है कि यह एक सहकर्मी निर्भरता और देव निर्भरता दोनों होगा, क्योंकि आपको अपने उपभोक्ताओं को अपने देव निर्भरता स्थापित करने के लिए कभी मजबूर नहीं करना चाहिए। मैं अपने साथियों को स्थापित करना आसान बनाता हूं!

@nikolakanacki यदि आप किसी ऐसे पैकेज को लेखक करते हैं, जो किसी अन्य पैकेज पर निर्भर करता है, जिसे उपयोगकर्ता इंस्टॉल करता है, तो आप यह नहीं चाहते हैं कि यह निर्भरता में हो, जिसके परिणामस्वरूप उस पैकेज का एक अलग संस्करण में डुप्लिकेट हो सकता है, और कुछ मामलों में समझ में नहीं आएगा। ...

केस एस्लिंट-फाइंड-रूल्स का उपयोग करें

पैकेज ESLint में उपलब्ध नियमों को देखता है जो आपके कॉन्फ़िगरेशन में कॉन्फ़िगर नहीं किए गए हैं।
किसी उपयोगकर्ता के लिए इसका अर्थ निकालने के लिए, उन्हें अपने द्वारा स्थापित ESLint पैकेज की जांच करने की आवश्यकता है, न कि आपके पैकेज के साथ आने वाले कुछ विशिष्ट संस्करण (या latest )।
तो, यह peer निर्भरता है।

अब यदि आप परियोजना में योगदान करना चाहते हैं, तो आप चाहते हैं कि ESLint नोड_मॉड्यूल्स में स्थापित हो ताकि आप अपने कोड का परीक्षण कर सकें, बिना किसी डमी प्रोजेक्ट के साथ कुछ npm-लिंक किए बिना जो ESLint को स्थापित करता है।

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

तो ... एक ध्वज जो यार्न स्थापित करता है पीयर डिप्स यदि वे पहले से स्थापित नहीं हैं तो कृपया उस समस्या को हल करेंगे।

दिलचस्प बिंदु

  • yarn add <package> --peer इसे node_modules पर स्थापित करता है और इसे package.json में जोड़ता है
  • yarn add <other_package> उसके बाद नोड_मॉड्यूल्स से स्थापित पैकेज को हटा देता है

मैं वर्तमान में @nikolakanacki मॉडल का अनुसरण कर रहा हूं और यह काम करने लगता है। मैं मानता हूं कि यह भ्रामक हो सकता है और मैं yarn install --peer dependencies , devDependencies और peerDependencies स्थापित करना पसंद करूंगा लेकिन यह मेरे लिए अच्छा है।

अगर मुझे यह अधिकार @kyleholzinger / @gaastonsr मिल रहा है, तो आप peerDependencies डेवलपमेंट मोड ( cd -p को रेपो / पैकेज में स्थापित करने के लिए नहीं देख रहे हैं, जिसके पास peerDependencies , ताजा क्लोन, उन सहकर्मी deps पर विकसित करने की आवश्यकता है), लेकिन आप जो पैकेज peer deps है स्थापित करने के बाद उन्हें लक्ष्य परियोजना में जोड़ें?

स्पष्ट करने के लिए: आप eslint-find-rules स्थापित करते हैं जो शिकायत करता है कि आपको एक निर्भरता के रूप में eslint (यह peerDependency eslint-find-rules ) है, इसलिए अब आप एक आसान तरीका चाहते हैं peer में उन निर्भरता को जोड़ने पर आप (वर्तमान प्रोजेक्ट जो eslint-find-rules पर निर्भर करता है) पर काम कर रहे हैं? कुछ इस तरह "संकल्प और नई निर्भरता के रूप में जोड़ें ( package.json और yarn.lock संशोधित करें) सबसे अच्छा मिलान सहकर्मी निर्भरता मेरे वर्तमान निर्भरता की आवश्यकता है"?

यदि यह आपकी बात है तो यह सुपर उपयोगी हो सकता है, मैंने सोचा कि आप विकसित होने पर उन्हें ऑटो-इंस्टाल करने की बात कर रहे थे।

इस सुविधा को और अधिक शुद्ध सुविधा के लिए पेश किया जा सकता है, उदाहरण के लिए: कई निर्भरताएं सहकर्मी लक्ष्य से एक ही पैकेज पर निर्भर हो सकती हैं, लेकिन इसके विभिन्न संस्करणों की आवश्यकता होती है - यह सुविधा एकल सर्वश्रेष्ठ को हल करने का प्रयास करके इसे सर्वश्रेष्ठ बना सकती है। लक्ष्य (यदि संभव हो तो)।

निश्चित रूप से कुछ सोचने के लिए।

यदि यह आपकी बात है तो यह सुपर उपयोगी हो सकता है, मैंने सोचा कि आप विकसित होने पर उन्हें ऑटो-इंस्टाल करने की बात कर रहे थे।

यह वही है जिसकी मुझे तलाश है। जब मैं पैकेज विकसित कर रहा हूं तो सहकर्मी निर्भरताएं स्थापित करना।

हाँ बिल्कुल @nikolakanacki! मुझे लगता है कि लोगों के लिए अपने सहकर्मी डिपो का प्रबंधन करने में हमारी मदद करने का एक बड़ा अवसर है।

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

इस तरह के मामलों में निर्भरता स्थापित करने से पहले दो सरल और पूरी तरह से असंबंधित प्रश्न पूछे जाने चाहिए:

  1. मेरा पैकेज इस पैकेज पर निर्भर करता है, लेकिन मैं लक्ष्य परियोजना से इसे शामिल करने की अपेक्षा करता हूं क्योंकि मेरा पैकेज उस पैकेज के लिए सिर्फ एक प्लगइन है: इसे peerDependencies
  2. मेरे पास ऐसे परीक्षण हैं जो इस पैकेज पर निर्भर करते हैं लेकिन यह मेरे dependencies सूचीबद्ध नहीं है (और वहां सूचीबद्ध नहीं होना चाहिए) जो भी कारण हो: इसे devDependencies

दूसरे शब्दों में: वे सभी पैकेज जिन्हें विकास के दौरान मौजूद रहने की उम्मीद है और जिन्हें विकसित किए जा रहे पैकेज की प्रत्यक्ष निर्भरता के रूप में सूचीबद्ध नहीं किया जाना चाहिए, उन्हें devDependencies में रहना चाहिए। डुप्लिकेट एक मुद्दा नहीं है - कहीं डॉक्स में यह नहीं कहा गया है कि इन मामलों में नकल की अनुमति नहीं है / प्रोत्साहित नहीं किया गया है।

@nikolakanacki जब हम एक पैकेज के लिए एक प्लगइन का निर्माण करते हैं, तो हमें उपयोगकर्ता द्वारा स्थापित पैकेज संस्करण पर निर्भर होना चाहिए, अगर हम इसे devDependency रूप में जोड़ते हैं, तो हम अनिवार्य रूप से एक भिन्न संस्करण स्थापित करेंगे और इसका उपयोग इसके बजाय किया जाएगा उपयोगकर्ता का संस्करण।

जब तक हमने निर्भरता को * रूप में परिभाषित नहीं किया, लेकिन तब यार्न को किसी भी तरह से नियतात्मक होना चाहिए और हमारे बजाय उपयोगकर्ता स्थापित पैकेज को प्राथमिकता देना चाहिए।

वर्तमान में ऐसा नहीं है:

@alexilyaev मुझे लगता है कि @nikolakanacki का अर्थ यह है कि इसे सहकर्मी और निर्भरता दोनों के रूप में स्थापित किया जाए।

यह समस्या है कि हम दोनों को सिंक में रखने की आवश्यकता है। मेरे लिए यह अभी के लिए अच्छा काम करता है लेकिन मुझे नहीं लगता कि यह आदर्श है।

@alexilyaev जब आप peerDependency घोषणा करते हैं तो आप इसका संस्करण भी घोषित करते हैं। जब तक लक्ष्य परियोजना में उस सहकर्मी निर्भरता का संस्करण स्थापित नहीं होता है जो आपके द्वारा परिभाषित संस्करण को भी संतुष्ट करता है - yarn / npm एक त्रुटि (अनुपस्थित सहकर्मी निर्भरता, कुछ ऐसा ही) रिपोर्ट करेगा।

गैर devDependency का इससे कोई लेना-देना नहीं है, यह स्रोत पैकेज के अंदर yarn या npm install चलने पर स्थापित किया जा रहा है (जो एक सहकर्मी निर्भरता की घोषणा करता है, जैसे) : एक प्लगइन), और यह तब भी परामर्श नहीं किया जाता है जब पैकेज का उपयोग किसी तीसरे पक्ष के पैकेज / प्रोजेक्ट (एक सहकर्मी) द्वारा किया जा रहा हो।

मुद्दा यह है: मैं यह नहीं देखता कि यह सब कैसे प्रासंगिक है?

मैं उन्हें सिंक में रखने के दर्द को देख सकता हूं, लेकिन आप आसानी से bash / javascript / <whatever> स्क्रिप्ट लिख सकते हैं जो इसे पोस्ट-इंस्टाल स्टेप के रूप में चेक करेगा package.json

जिस बिंदु को मैं बनाने की कोशिश कर रहा हूं, वह यह है कि किसी भी तरह से हम devDependencies भावना को न तोड़ें, या इससे भी बदतर " yarn npm install चल रहे हों," जरूरी नहीं है कि सभी को स्थापित न करें इस पैकेज की आवश्यक निर्भरताएं "अवधारणा।

दूसरी ओर yarn ने एक और अधिक सख्त नीति पेश की जब यह आता है, यह संकुल को साफ करता है अन्यथा dependencies या devDependencies रूप में परिभाषित नहीं किया जाता है ताकि आप न भागें बाद में मुद्दों पर।

@nikolakanacki मान लें कि मेरा प्लगइन ^7.0.0 स्वीकार करता है और सहकर्मी का नवीनतम 7.9.0 और उपयोगकर्ता उनके package.json 7.4.0 में परिभाषित करता है।
अगर मेरे पास ^7.0.0 devDependencies भी होंगे, तो क्या यार्न इंस्टॉल नहीं होगा (उपयोगकर्ता के लिए) दोनों 7.9.0 और 7.4.0 ?

अगर ऐसा होता है, तो मेरा प्लगइन गलती से 7.9.0 बजाय 7.4.0

@alexilyaev आपका पैकेज हमेशा किसी भी अन्य मामले में किसी भी अन्य पैकेज के रूप में, उच्चतम उपलब्ध संस्करण का उपयोग करेगा जो इस सहकर्मी के लिए आपके पैकेज में परिभाषित "सेवर रेंज" को संतुष्ट करता है।

मैं और अधिक विशिष्ट हो सकता हूं, लेकिन आपके द्वारा प्रस्तुत किए गए मामले को मैं बिल्कुल नहीं समझता, क्या आप कृपया स्पष्ट कर सकते हैं?

~ यह आपको चेतावनी देगा कि आपके पास peerDependency असंगतता है, आपका प्लगइन ^7.0.0 अपेक्षा करता है और आपके पास 7.4.0 संस्करण है। ~ अपडेट किया गया: ^7.0.0 7.4.0 संतुष्ट करता है।

यार्न स्थापित नहीं होगा (उपयोगकर्ता के लिए) दोनों 7.9.0 और 7.4.0?

यार्न आपके लिए peerDependencies स्थापित नहीं करता है और आपके प्लगइन में सिर्फ dependencies निर्भरता के devDependencies स्थापित नहीं करेगा।

@gaastonsr आप बिलकुल सही हैं सिवाय इसके कि ^7.0.0 7.4.0 संतुष्ट हों।

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

Npm द्वारा समझाया गया सेमर श्रेणी: https://docs.npmjs.com/misc/semver
जब हमेशा संदेह की जाँच करें: http://jubianchi.github.io/semver-check/

@nikolakanacki आसानी से पैकेज स्थापित करने में सक्षम होने के लिए सहकर्मी महान होंगे!

@nikolakanacki ठीक है, इसलिए वास्तव में जब एंड-यूज़र पैकेज स्थापित करता है, devDependencies स्थापित नहीं होता है, इसलिए एक पैकेज लेखक को peerDependencies से devDependencies भी जोड़ना चाहिए

इसलिए, यह स्थानीय विकास के मुद्दे को हल करता है।

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

तो ... मैं अभी भी सहकर्मी निर्भरता स्थापित करने के लिए एक तरह से समर्थन करने का प्रस्ताव कर रहा हूं, कम से कम इसलिए हमें install-peerdeps का उपयोग नहीं करना होगा।

यहां असल मुद्दा क्या है? ऐसा प्रतीत नहीं होता है कि डिपों की एक सूची स्थापित करना डिपों की दूसरी सूची स्थापित करने से अधिक जटिल होगा। कुछ वर्षों से सहकर्मी पर निर्भरताएं हैं। इसने किसी को कैसे परेशान नहीं किया है?

@nikolakanacki समाधान एकदम सही समझ में आता है। यह वही है जो हम अपने पुस्तकालय विकास के लिए उपयोग कर रहे हैं। आपको अलग से परीक्षण के लिए लाइब्रेरी में devDependencies सेटअप की आवश्यकता है (एक होस्ट प्रोजेक्ट के बाहर जो आवश्यक peerDependencies आपूर्ति करता है) और आपको एकीकृत परीक्षण के लिए और होस्ट सुनिश्चित करने के लिए peerDependencies आवश्यकता है परियोजना निरर्थक / डुप्लिकेट किए गए पैकेज इंस्टॉलेशन के साथ समाप्त नहीं होती है क्योंकि जो लाइब्रेरीज़ खपत करती हैं, वे उसी dependencies और _ not _ का उपयोग peerDependencies और devDependencies उचित उपयोग कर रही हैं।

सिंक में उन्हें रखने के छोटे सिरदर्द है। लेकिन @nikolakanacki ने बताया कि यह आसानी से कुछ post-install स्क्रिप्टिंग के माध्यम से कम किया जा सकता है।

क्या समाधान?

मैं काफी तेजी से टिप्पणियों के माध्यम से चला हूं और एक सरल समाधान पर ध्यान नहीं दिया है:

अगर यह शीर्ष स्तर के पैकेज में है, तो कृपया नियमित निर्भरता के रूप में सहकर्मी स्थापित करें

यह पूरी तरह से विकास / परीक्षण के मामलों में फिट बैठता है और निर्भरता के रूप में पैकेज की स्थापना को प्रभावित नहीं करता है। यार्न के लिए हमारे पास तर्क के समान है। प्लॉक। अतिरिक्त "विकास" या जो भी मोड की आवश्यकता नहीं है।

दरअसल, सहकर्मी निर्भरता से संबंधित अन्य यार्न बग के कारण, ऐसा लगता है कि यह कुछ मामलों में कैसे व्यवहार करता है।

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

मैं इसे बंद कर रहा हूं क्योंकि मुझे इस बात की स्पष्ट तस्वीर नहीं मिल सकती है कि समस्या क्या है और यदि कोई हो तो प्रस्तावित समाधान क्या है।

एक स्पष्टीकरण या एक नया बग दाखिल करने के लिए स्वतंत्र महसूस करें।

@ NYK क्या आपको वाकई यकीन है कि आप 55 अंगूठे और 34 टिप्पणियों के साथ मुद्दों को बंद कर रहे हैं, क्योंकि यह आपके लिए स्पष्ट नहीं है?

मुझे लगता है, यह काफी सीधा है: सुनिश्चित करें कि शीर्ष-स्तरीय पैकेज में सेट किए जाने पर सहकर्मी निर्भरताएं स्थापित हों
या दूसरे तरीके से कहें: वर्तमान पैकेज में सेट होने पर सहकर्मी निर्भरता को नियमित निर्भरता मानें

सहकर्मी निर्भरता को देव निर्भरता के रूप में जोड़ना, जैसा कि इस धागे में आगे प्रस्तावित है, प्रवाह-प्रकार को तोड़ देगा: https://github.com/flowtype/flow-typed/issues/379

@andvgal मैं सिर्फ मुद्दों को सुलझाने की कोशिश कर रहा हूं और महीनों पहले से यहां की सारी चर्चा भारी और संक्षेप में कठिन थी।

मुझे लगता है, यह काफी सीधा है: सुनिश्चित करें कि शीर्ष-स्तरीय पैकेज में सेट किए जाने पर सहकर्मी निर्भरताएं स्थापित हों।
या दूसरे तरीके से कहें: वर्तमान पैकेज में सेट होने पर सहकर्मी निर्भरता को नियमित निर्भरता मानें

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

या - कम से कम - पैकेज को छूने के बिना सहकर्मी निर्भरता को अलग से स्थापित करने का एक तरीका प्रदान करें। json फ़ाइल। एक सहकर्मी निर्भरता स्थापित करने के लिए ऐड का उपयोग करते समय, JSON फ़ाइल में प्रविष्टि को संशोधित किया जाता है। यदि आपने अपनी वीर्य अभिव्यक्ति को एक तरह से अलग किया है, जो कि यार्न डिफ़ॉल्ट रूप से लिखता है, तो यह बदल जाता है।

मुझे लगता है कि स्थापित करने के लिए एक --peer स्विच जोड़ने का विचार ठीक है, लेकिन मैं वास्तव में उन्हें एक-एक करके स्थापित करने में सक्षम होना चाहता हूं, क्योंकि मैं इनमें से कुछ मॉड्यूल को अक्सर लिंक करता हूं, और मैं एक लिंक के बीच आगे-पीछे जाता हूं और वास्तव में मॉड्यूल स्थापित है। Npm के साथ, मैं सिर्फ 'npm i' चला सकता हूं'। यार्न में, मुझे एक समकक्ष नहीं दिखता है। विशेष रूप से, मैं package.json में ऐनक का उपयोग करते हुए, पैकेज फ़ाइल को संशोधित किए बिना, एक फ़ाइल स्थापित करने में सक्षम होना चाहता हूँ।

@jimsugg , मैं yarn add <package...> -p का उपयोग कर रहा हूं, मैन्युअल रूप से पहले से ही पैकेज में सूचीबद्ध सहकर्मी निर्भरता को स्थापित करने के लिए। Json, जो निश्चित रूप से एक विरोधी पैटर्न है। ऐसा लगता है कि सहकर्मी निर्भरताएं विकास के वातावरण में स्वचालित रूप से स्थापित की जानी चाहिए (यदि यह वास्तव में एक सहकर्मी निर्भरता है, तो पैकेज की आवश्यकता वाले कम से कम परीक्षण होने चाहिए)।

मैं एक ही चीज़ की तलाश में था और इस बैश वन-लाइनर के साथ सभी सूचीबद्ध पीयर डिप्स स्थापित करने की आवश्यकता थी (आपको jq स्थापित करने की आवश्यकता है): yarn add $(jq -r '.peerDependencies|keys|join(" ")' package.json)

मैं उम्मीद करता हूं कि इससे किसी की मदद होगी।

@EdwardDrapkin उस के लिए धन्यवाद, महान विचार! मैंने इसे बढ़ाया और ऐसा करने के लिए एक npm स्क्रिप्ट जोड़ने को समाप्त किया:

"install:peers": "yarn add -P $(jq -r '.peerDependencies | to_entries | map(\"\\(.key)@\\(.value | tostring)\") | join(\" \")' package.json)",

बस peerDependencies से संस्करण की युक्ति को बनाए रखता है;) केवल अड़चन यहाँ है अगर आप latest टैग का उपयोग नहीं करना चाहते हैं, बल्कि एक और आप next तरह काम कर रहे हैं

@ शॉस्पर यहां jq निर्भरता के बिना एक तरीका है:

node -e "const peers = Object.entries(require('./package.json').peerDependencies || {}).map(d => d.join('@')).join(' '); if (peers.length) process.stdout.write('yarn add -P --no-lockfile ' + String(peers));" | sh

वहाँ एक परिदृश्य में जहाँ आप स्थापित करने के लिए नहीं करना चाहते पैकेज के एक सहकर्मी निर्भरता है Foo जब आप पर सीधे काम कर रहे हैं Foo ? मैं एक के बारे में सोच भी नहीं सकता। यदि Bar Foo का उपयोग करना आवश्यक है, तो Foo पर काम करते समय आपको इसकी आवश्यकता होती है, और चूंकि यह एक सहकर्मी निर्भरता है, इसलिए यह नियमित निर्भरता नहीं हो सकती है। यह केवल पैकेज पर सीधे काम करते समय स्थापित किया जाना चाहिए, जो कि देव निर्भरता करते हैं।

उस वजह से, मुझे लगता है कि यह सहकर्मी पर निर्भरता का इलाज करने के लिए यार्न के लिए समझ में आता है, लेकिन फिर वे भी वही करते हैं जो अब करते हैं, जो चेतावनी उत्पन्न करता है। मैं आमतौर पर हर सहकर्मी निर्भरता को एक निर्भरता बना देता हूं, इसलिए यह कुछ दोहराव से बचा सकता है।

वहाँ एक कारण है कि एक समस्या होगी? यह शायद एक ब्रेकिंग बदलाव होगा इसलिए इसे 2.0 तक इंतजार करना होगा, लेकिन इसके अलावा ऐसा लगता है कि यह ठीक होना चाहिए।

एक मुद्दा यह हो सकता है कि आप अपने सहकर्मी की आवश्यकता से अधिक विशिष्ट संस्करण देव के लिए स्थापित करना चाहते हैं। उस स्थिति में, मैं कहूंगा कि आपको स्थानीय इंस्टॉलेशन के लिए सहकर्मी संस्करण को ओवरडिपेंडेंसी में डुप्लिकेट करके ओवरराइड करने में सक्षम होना चाहिए। उदाहरण के लिए

सहकर्मी: प्रतिक्रिया @^16.0.0
निर्भरता: प्रतिक्रिया @~16.1.0

प्रतिक्रिया की स्थानीय स्थापना को ~ 16.1.0 तक सीमित कर देगा, लेकिन सहकर्मी निर्भरता के रूप में किसी भी v16 संस्करण की अनुमति देगा। मुझे पूरी तरह से यकीन नहीं है कि ऐसा कुछ कहाँ आवश्यक होगा, लेकिन यह अमान्य नहीं लगता।

मैं सहमत हूं @bdwain , मैं शब्दार्थ समझता हूं कि एक सहकर्मी और देव निर्भरता के बीच अंतर क्या है, लेकिन व्यवहार में वे ठीक उसी तरह स्थापित होते हैं; यदि आप मॉड्यूल के विकास में हैं, तो आपको देव और सहकर्मी निर्भरता दोनों स्थापित करने की आवश्यकता है, और यदि आप मॉड्यूल का उपयोग कर रहे हैं, तो आप केवल इसके सूचीबद्ध वास्तविक निर्भरताएं स्थापित करते हैं। अगर ऐसा है, तो मुझे install कमांड में अलग-अलग व्यवहार करने की बहुत अच्छी वजह नहीं दिखती है।

@bdwain @kyleholzinger मैं असहमत हूं, क्योंकि peerDependencies सख्ती से एक निर्भरता की आवश्यकता को सूचित करने के लिए होते हैं, कि निर्भरता को स्थापित करने की वास्तविक कार्रवाई का निर्देश देने के लिए।

यह सुनिश्चित करता है कि क्षणिक निर्भरता संस्करणों का मुद्दा जो रूट / टॉप-लेवल पैकेज में भी मौजूद है, चुपचाप (और गलत तरीके से इस्तेमाल किया जा रहा है)। उदाहरण के तौर पर babel-core पर विचार करें।

यार्न के संदर्भ में यहाँ अभाव समर्थन एक सहकर्मी और देव डे दोनों के रूप में परिभाषित करने की क्षमता है, जैसा कि यहां वर्णित है

कहा कि, पीयर डिप्स के लिए डिफॉल्ट इंस्टॉल युक्ति के अनुरूप रखने और बेहतर देव अनुभव प्रदान करने के लिए .... शायद यार्न इंस्टाल कमांड के लिए --include-peers विकल्प पेश कर सकता है?

@hulkish जब मैं भावना से सहमत हूं, तो एक उदाहरण कब होगा जब आप सहकर्मी निर्भरता के रूप में कुछ घोषित करना चाहेंगे, लेकिन _not_ एक देव निर्भरता के रूप में?

यदि मैं उपयोग को सही ढंग से समझता हूं, विशेष रूप से यार्न के साथ, सहकर्मी निर्भरता की सूची हमेशा देव निर्भरता का एक सबसेट है। यदि यह मामला है, तो मुझे ऐसा लगता है कि इसे आधिकारिक तौर पर मान्यता दी जानी चाहिए और आपको सहकर्मी निर्भरता को देव निर्भरता घोषित करने की आवश्यकता नहीं होनी चाहिए।

एकमात्र कारण जो मैं सामने लाता हूं, वह यह है कि मुझे लगता है कि एक कमांड / विकल्प को जोड़ना जो एक देव और सहकर्मी निर्भरता दोनों के रूप में कुछ जोड़ देगा, ऐसा लगता है कि यह सामान्य रूप से यार्न की जटिलता को बढ़ाएगा, और मुझे ऐसा लगता है कि यहां कहीं एक समाधान है जो अच्छा है और सरल 😄

@kyleholzinger

@hulkish जब मैं भावना से सहमत हूं, तो एक उदाहरण कब होगा जब आप सहकर्मी निर्भरता के रूप में कुछ घोषित करना चाहेंगे, लेकिन एक देव निर्भरता के रूप में नहीं?

जब आपको अपनी इकाई परीक्षण या चलाने के लिए निर्माण की आवश्यकता नहीं है। मेरे अनुभव के अनुसार, यह वास्तव में दोनों स्थानों पर उन्हें जोड़ने की आवश्यकता है, जिसके साथ शुरू करना है।

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

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

@hulkish

जब आपको अपनी इकाई परीक्षण या चलाने के लिए निर्माण की आवश्यकता नहीं है

पूरी तरह से हो जाओ! हालांकि यह सवाल उठता है: अगर कोई सहकर्मी निर्भरता है, लेकिन आपको इसे चलाने के लिए अपनी इकाई परीक्षण या निर्माण की आवश्यकता नहीं है, तो आपके पास एक सहकर्मी निर्भरता क्यों है?


सहकर्मी पर निर्भरता का उपयोग करने का प्राथमिक लाभ यह है कि असंगत क्षणिक निर्भरता का उपयोग किए जाने पर दृष्टि प्राप्त करना है

यह मैं दृढ़ता से सहमत हूं, मुझे लगता है कि सहकर्मी निर्भरताएं मॉड्यूल के उपभोक्ता से अभी अद्भुत हैं जो कि सहकर्मी निर्भरता वाले पुस्तकालय पर निर्भरता की घोषणा कर रहा है, मेरा मुख्य पकड़ / दर्द बिंदु मॉड्यूल पर विकास है जो सहकर्मी निर्भरता है। क्षमा करें यदि कोई भ्रम था!

मेरा मुख्य प्रश्न / सुझाव / आशा-से-प्राप्त-स्वीकृत-टू-वर्क-ऑन-वर्क यह होगा कि जब आप किसी मॉड्यूल में yarn install (उत्पादन में नहीं) हों जो कि अपने स्वयं के package.json में सहकर्मी निर्भरता रखता हो


@bdwain @hulkish

मुझे लगता है कि @hulkish एक ऐसे परिदृश्य के बारे में बात कर रहा था, जहाँ आप अपने किसी एक व्यक्ति की

मैं विशेष रूप से तब बात कर रहा हूं जब आप सहकर्मी निर्भरता वाले मॉड्यूल को विकसित करते समय yarn install करते हैं, न कि जब आप किसी अन्य परियोजना के लिए सहकर्मी निर्भरता के साथ मॉड्यूल जोड़ते हैं

@bwwain बिल्कुल नहीं, यह निश्चित रूप से वर्णन करने के लिए एक फिसलन भरी चीज़ है। मैं एक उदाहरण का उपयोग करने की कोशिश करूंगा:

मामले के साथ मामले का उपयोग करें

मान लें कि यह आपका शीर्ष स्तर पैकेज है:

  "dependencies": {
    "foo": "^4.0.0",
    "react": "^15.0.0"
  }

उसके बाद, आपका फू / पैकेज.जसन:

  "dependencies": {
    "react": "^16.0.0"
  }

इस निर्भरता के अनुसार, जब आप यार्न / एनपीएम इंस्टॉल करते हैं, तो आपका नोड_मॉड्यूल्स इस तरह दिखेगा:

node_modules/
  react/ <-- @^15.0.0
  foo/node_modules/react/ <-- @^16.0.0

इस बिंदु पर, जब तक कि आप (जो भी कारण से) स्वेच्छा से आपके नोड_मॉड्यूल्स नेस्टेड डायर संरचना का निरीक्षण करने का निर्णय लेते हैं - आपको कभी नहीं पता होगा कि कोई समस्या है। यह पैकेज प्रबंधक की गलती नहीं है - इसने अपना काम सही ढंग से पूरा किया।

तो, सहकर्मी निर्भरता का उपयोग करने के लिए एक निर्देश के बजाय एक सत्यापन जाँच के रूप में उनका इलाज करके इस उपयोग के मामले को हल करने का इरादा है।

सहकर्मी निर्भरता समाधान के साथ मामले का उपयोग करें

  "dependencies": {
    "foo": "^4.0.0",
    "react": "^15.0.0"
  }

उसके बाद, आपका फू / पैकेज.जसन:

  "peetDependencies": {
    "react": "^16.0.0"
  }

सबसे पहले, यह स्पष्ट कर दें कि इस बिंदु पर दोनों उपयोग मामलों में प्रतिक्रिया संस्करणों

इस उपयोग के मामले में अंतर है; इस समस्या के बजाय चुपचाप मौजूदा। जब आप npm / यार्न इंस्टॉल चलाते हैं - पैकेज प्रबंधक का कर्तव्य है कि वह त्रुटि या चेतावनी के रूप में असंगति की रिपोर्ट करे।

आशा है कि यह इसे बेहतर समझाता है।

@kyleholzinger

मैं विशेष रूप से बात कर रहा हूं कि जब आप सहकर्मी निर्भरता वाले एक मॉड्यूल को विकसित करते समय यार्न स्थापित करते हैं, न कि जब आप किसी प्रोजेक्ट के लिए सहकर्मी निर्भरता के साथ मॉड्यूल जोड़ते हैं

मै समझता हुँ। मुझे लगता है कि पीयर डिप्स के लिए डिफॉल्ट बिहेवियर जैसा है वैसा ही रहना चाहिए। लेकिन, मुझे लगता है कि एक आसान उपाय यह है कि इसे cli और / या env vars और / या .yarnrc माध्यम से कॉन्फ़िगर किया जा सकता है। --install-peers-as-dev जैसा कुछ

@hulkish

लेकिन, मुझे लगता है कि एक आसान उपाय यह है कि इसे cli और / या env vars और / oryarnrc के माध्यम से कॉन्फ़िगर किया जा सकता है। जैसे कुछ - स्थापना-साथियों-जैसा-देव

अरे हाँ! मुझे व्यक्तिगत रूप से लगता है कि उन्हें देव निर्भरता और सहकर्मी निर्भरता दोनों नहीं होना चाहिए, लेकिन यह एक अलग चर्चा हो सकती है। मुझे लगता है कि इस विकल्प को जोड़ना एक ठोस समझौता होगा और इस बीच समस्या को हल करने का एक शानदार तरीका है- मैं इसे जाँचने जा रहा हूँ और साथ में कुछ फेंकने की कोशिश करूँगा :)

@kyleholzinger यह https://github.com/yarnpkg/yarn/blob/master/src/cli/commands/install.js#L58 शुरू करने के लिए एक अच्छी जगह है

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

@hulkish मैं समझता हूं कि सहकर्मी निर्भरता क्या हैं। मेरा कहना था कि व्यवहार में, आपको हमेशा विकास के उद्देश्यों के लिए उन्हें स्थापित करने की आवश्यकता होती है, इसलिए उन्हें संस्करणों के बेमेल होने पर चेतावनी देने की उनकी भूमिका के अलावा अन्योन्याश्रितताओं के रूप में माना जाना चाहिए।

यदि एक पैकेज फू में बार पर एक सहकर्मी निर्भरता है, तो एकमात्र ऐसा परिदृश्य जहां आप बार को स्थापित नहीं करना चाहते हैं जब फू पर सीधे काम करना होगा यदि आपके बिल्ड और स्वचालित परीक्षणों को बार की कोई आवश्यकता नहीं थी। लेकिन अगर ऐसा होता है, तो इसका मतलब यह होगा कि आपके बिल्ड / परीक्षणों ने उस कार्यक्षमता का उपयोग नहीं किया है जो पहले स्थान पर बार में सहकर्मी निर्भरता की आवश्यकता होती है, जो कि सामान्य मामला नहीं होना चाहिए।

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

और उन्हें स्वचालित रूप से देव और सहकर्मी दोनों के साथ जोड़ना अभी भी दो स्थानों पर निर्भरता की नकल करने की समस्या है, जो आईएमओ एक समस्या है और आवश्यक नहीं होना चाहिए।

किसी भी तरह से, उन चेतावनियों / त्रुटियों की सूचना दी जानी चाहिए।

यह कैसे संभव है कि हमारे पास अभी तक यह सुविधा नहीं है? मैं npm संकुल बनाने के लिए नया हूँ, लेकिन ऐसा लगता है कि यह npm संकुल के विकास के मुख्य वर्कफ़्लो का हिस्सा है।

वही @ नील्स! मैं वास्तव में पूरी तरह से भूल गया था मैंने कहा था कि मैं इस पर काम करने वाला था इसलिए अभी तक शुरू नहीं हुआ है, मैं उस पर काम करने की कोशिश करूंगा जब मैं कर सकता हूं, इसलिए हम कम से कम लोगों को .yarnrc में यह विकल्प दे सकते हैं हर समय इसके बारे में चिंता करने की ज़रूरत नहीं है

मुझे लगता है कि यह सुविधा बेहद महत्वपूर्ण है।

मैं कई उपयोग-मामलों के बारे में सोच सकता हूं, खासकर जब यह पुस्तकालय लेखकों की बात आती है।

मान लें कि मैं एक घटक पुस्तकालय विकसित करना चाहता हूं, जिसमें react और react-dom peerDependencies (मैं नहीं चाहता कि वे अंततः इसका उपयोग करके बँधे रहें, जो कि नकल करेगा उन दो पुस्तकालयों और समस्याओं का कारण बन सकता है, जो मैंने पहले अनुभव किया है)।

मैं अपने घटक पुस्तकालय को उन peerDependencies स्थापित के साथ परीक्षण करना चाहता हूं, इसलिए मैं CI पर और मेरी मशीन पर yarn --include-peerDeps (या ऐसा ही कुछ) चलाना चाहता हूं, लेकिन जब कोई yarn चलाता है react और react-dom निर्भरता का उपयोग करना चाहता हूं (इससे कोई फर्क नहीं पड़ता कि वे कैसे करते हैं)।

मुझे यह भी लगता है कि जब से हमने वहां मॉड्यूल बनाए हैं जो वास्तव में ऐसा करते हैं और बहुत सारे डाउनलोड करते हैं यह पहले से ही इस सुविधा को मूल बनाता है। ("कुछ लोग चाहते हैं" का पुराना आदर्श वाक्य यहाँ IMO लागू होता है)

मैं नहीं देख सकता कि यह एक बुरा अभ्यास कैसे हो सकता है क्योंकि इसे --include-peerDeps माध्यम से स्पष्ट रूप से भिखारी होना पड़ेगा।

यदि आवश्यक हो तो मैं चर्चा करने और कार्यान्वयन में मदद करने के लिए खुश हूं।

@lucasfcosta अधिक सहमत नहीं हो सका! मेरे पास इन दिनों इस पर काम करने के लिए एक टन का समय नहीं है, इसलिए जब मैं कर सकता हूं, तब चारों ओर प्रहार करने की कोशिश कर रहा हूं, लेकिन कमांड लाइन विकल्प से विकल्प सत्य नहीं मिल सकता है। हालांकि एक मदद हाथ प्यार करेंगे :)

@lucasfcosta यहां मेरा बुरा कार्यान्वयन है जहां मुझे लगा कि विकल्प जीवित हो सकता है, मुझे हालांकि कोई पता नहीं है। कमांड लाइन विकल्पों में से एक जोड़े के पैटर्न का पालन करने की कोशिश कर रहा था, लेकिन काम नहीं कर रहा था।

मैं वर्तमान में डुप्लीकेशन एप्रोच (डिडिपेंडेंसी और पियरडिपेंडेंसी) ले रहा हूं, लेकिन इस फीचर से बहुत प्यार करेगा इसलिए मैं ऐसा करना बंद कर सकता हूं।

मुझे वह भी चाहिए। इस बीच मैं एक छोटे नोड काम किया है

const pkg = require('./package.json');
const entries = Object.entries(pkg.peerDependencies);
const shell = require('shelljs');

let deps = ['yarn add'];
for ([dep, version] of entries) {
    deps[deps.length] = `${dep}@${version}`;
}

deps.push('--peer');
const cmd = deps.join(' ');
console.log('Installing peer deps!\n -----', cmd);
const result = shell.exec(cmd);

if (result.code !== 0) {
    shell.echo('Error: installing peer dependencies');
    shell.exit(1);
}

ठंडा! अब हम इसे केवल यार्न में पेस्ट कर सकते हैं और एक झंडा या जो भी जोड़ सकते हैं।

Thu पर, 4 अक्टूबर, 2018, 17:29 पासक्वेले मंगियालवार्इ नोटिफिकेशन @github.com
लिखा था:

मुझे वह भी चाहिए। इस बीच मैं एक छोटे नोड काम किया है

`const pkg = आवश्यकता ('./ package.json');
const प्रविष्टियाँ = Object.entries (pkg.peerD dependencies);
const खोल = आवश्यकता ('shelljs');

चलो डिप्स = ['यार्न ऐड'];
([प्रविष्टियों का [संस्करण, संस्करण]) {
deps [depllength] = $ {dep} @ $ {version};
}

deps.push ( '- सहकर्मी');
const cmd = deps.join ('');
कंसोल.लॉग ('इंस्टालर पीयर डिप्स! n -----', cmd);
const परिणाम = shell.exec (cmd);

अगर (result.code! == 0) {
shell.echo ('त्रुटि: सहकर्मी निर्भरता स्थापित करना');
shell.exit (1);
} `

-
आप इसे प्राप्त कर रहे हैं क्योंकि आपका उल्लेख किया गया था।
इस ईमेल का उत्तर सीधे दें, इसे GitHub पर देखें
https://github.com/yarnpkg/yarn/issues/1503#issuecomment-427063046 , या म्यूट
सूत्र
https://github.com/notifications/unsubscribe-auth/AE64MGxna2iQ-BFNiC52mIVro8sydPu1ks5uhilsgaJpZM4KiMuo

मैं भी दोहराव ले रहा हूँ जैसा कि @RWOverdijk ने कहा। भविष्य में इस सुविधा को देखने के लिए प्यार।

Btw, क्या किसी के पास एक बेहतर समाधान है ताकि हमें एक पैकेज को दो बार जोड़ने की आवश्यकता न हो (देव-निर्भरता और सह-निर्भरता)?

भविष्य से नमस्ते। यह अभी भी पैकेज / कार्यकारी डेवलपर्स के लिए एक मुद्दा है। डुप्लिकेट डिप्स का उत्तर नहीं होना चाहिए।

मैं निश्चित रूप से इस सुविधा को जोड़कर देखना चाहूंगा। react को मेरे पैकेज के devDependencies जोड़ने के बिना, मैं अपने कोड पर परीक्षण चलाने में असमर्थ हूं।

स्थानीय peerDependencies ऑब्जेक्ट में पैकेज स्थापित करने के लिए एक झंडा अच्छा होगा, लेकिन मैं _any_ को peerDependencies _

झंडे के उपयोग पर मेरी राय निम्नलिखित है क्योंकि इसके साथ संरेखित किया गया है
yarn add --peer कमांड।

yarn --peer
# and
yarn install --peer

बहुत कम से

मुझे आश्चर्य है कि अगर अलग test ऐप का उपयोग करना एक अच्छा समाधान है? तब आप अपने सभी peerDependencies को dependencies test ऐप के रूप में जोड़ सकते थे। यह निम्नलिखित करने के लिए लगता है:

  • अपनी लाइब्रेरी में peerDependencies devDependencies रखता है
  • आप एक तरह से अपनी लाइब्रेरी का परीक्षण करेंगे e2e ... यह सुनिश्चित करना कि आपका डिस्ट ठीक से बनाया गया है, आप अपने सभी घटकों को सही तरीके से निर्यात कर रहे हैं और इस तरह की चीज
  • जब आप स्थानीय निर्भरता का उपयोग करते हुए node_modules अपने पैकेज से खाली करना भूल जाते हैं तो Invalid hook call त्रुटि से बचते हैं, जैसे "my-package": "file:/path/to/my-package"

यदि अधिक जानकारी लोगों के लिए उपयोगी होगी, तो मैंने इस दृष्टिकोण को मॉडल करने और इस समस्या को हल करने के प्रयास में एक डेमो रेपो बनाया:
https://github.com/jamstooks/package-peer-dependencies

अभी के लिए, आपको npx install-peerdeps <package> चलाने में सक्षम होना चाहिए और CLI तब आपसे पूछता है कि क्या आप यार्न को इंस्टॉल करने के लिए उपयोग करना चाहते हैं, यदि आपके पास फ़ोल्डर में यार्न लॉक आदि हैं। कम से कम मेरे लिए अभी काम किया है।

इस एनपीएम आरएफसी में आर्कानिस से अधिक चर्चा ("लापता पीर डिप्स पर असफल स्थापित करें") और आइजैक ("पीयर डीईएस स्वचालित रूप से स्थापित")।

https://github.com/npm/rfcs/pull/43

इस ब्लॉग पोस्ट ने इस मुद्दे पर मेरी मदद की: https://dev.to/yvonnickfrin/how-to-handle-peer-d dependencies-when-developing-modules-18fa

मेरे पास एक संबंधित मुद्दा है जो मुझे लगता है।
न्यूनतम रेप्रो के लिए मेरे पास निर्भरता की यह सूची है:

  "dependencies": {
    "prismic-reactjs": "^1.2.0"
  },
  "peerDependencies": {
    "react": "^16.12.0"
  },
  "devDependencies": {
    "react": "^16.12.0",
    "redux": "^4.0.5"
  }

स्पष्टीकरण: मेरा पैकेज रनटाइम पर react उपस्थिति पर निर्भर करता है और परीक्षण के लिए भी इसकी आवश्यकता होती है। redux डेमो उद्देश्यों के लिए यहां है, नीचे देखें।

अब, prismic-reactjs भी अपने सहकर्मी निर्भरता के रूप में react निर्भर करता है।
yarn --production बाद क्या होता है?

प्रतिक्रिया दोनों _installed_ और _hoisted_ है
मुझे उम्मीद है कि दोनों के _none_ होने की।

डेमो उद्देश्यों के लिए redux यहां जोड़ा गया है जो _not_ स्थापित है (जो मुझे लगता है) यह साबित करता है कि क्षणिक सहकर्मी निर्भरता मुद्दे का कारण है।

रेप्रो रेपो: https://github.com/emirotin/yarn-react-repro । त्वरित जाँच के लिए test.sh चलाएँ।

npm में अब v7 के साथ यह सुविधा है ... किसी भी कारण से इसे यार्न में नहीं जोड़ा जाए?

@sajadghawami जहाँ तक मुझे पता है, @arcanis के पास ऐसा करने के लिए कुछ बहुत बड़ा आरक्षण है:

https://github.com/npm/rfcs/pull/43#issuecomment -520584797

क्या यह पृष्ठ उपयोगी था?
0 / 5 - 0 रेटिंग्स