2016-08-18 12 views
13
$ npm install 
[email protected] /Users/antpaw/my_module 
├── [email protected] 
└── UNMET PEER DEPENDENCY [email protected]^2.74.0 

npm WARN [email protected] requires a peer of [email protected]^2.74.0 but none was installed. 

मुझे समझ में नहीं आता कि यह केवल एक चेतावनी कैसे हो सकता है। अगर यह "अनुरोध" स्थापित नहीं है और मेरा ऐप क्रैश हो जाएगा तो यह मेरे ऐप के लिए एक बहुत बड़ा सौदा है।एनपीएम सहकर्मी निर्भरता जांच

कैसे मैं 1 साथ npm install बाहर निकलें कर सकते हैं अगर एक सहकर्मी निर्भरता unmet की है या वहाँ npm do-i-have-everything-i-need-installed आदेश की तरह कुछ है कि 1 साथ बाहर निकल जाएगा है?

+0

डिजाइन के रूप में बहुत अधिक काम कर रहा है; यदि आप 'निर्भरता' का उपयोग करते समय अपना मॉड्यूल स्थापित करते समय निर्भरता स्थापित करना चाहते हैं। यदि आप उपभोक्ताओं को प्रबंधित करना चाहते हैं कि 'अनुरोध' का कौन सा संस्करण स्थापित है, तो आप 'peerDependency' का उपयोग करें। इस तरह से स्थापित करने में केवल दो कदम उठाए जाते हैं; बल्कि तीन अगर आप स्थापित करने में असफल हो जाते हैं ... आप शायद एक प्रमुख संस्करण के लिए 'निर्भरता' बनाने से बेहतर होंगे: यानी "2.x" इस तरह से यह स्थापित हो जाएगा, लेकिन उपभोक्ता मशीन पर deduped। बारीकी से संबंधित: http://stackoverflow.com/questions/35207380/how-to-install-npm-peer- निर्भरता- स्वचालित रूप से –

उत्तर

4

ऐसा लगता है कि मैं, 1 के साथ बाहर निकलने के लिए एक रास्ता मिल गया है/से पहले (मुझे लगता है कि आदेश कोई फर्क नहीं पड़ता) सामान्य npm install मैं npm install my_module जो 1 साथ बाहर निकल जाएगा चलाने की आवश्यकता करने के बाद। इसका मतलब है कि मैं मॉड्यूल की एक सूची को परिभाषित कर सकता हूं जिसे मैं सुनिश्चित करना चाहता हूं कि मेरी सीआई स्क्रिप्ट में उन्हें वास्तव में क्या चाहिए (peerDependencies में परिभाषित), सुंदर नहीं है लेकिन यह कुछ भी नहीं है।

तो npm install इससे कोई फर्क नहीं पड़ता कि आप किस प्रकार की निर्भरता बकवास करते हैं, जो आप अपने package.json में परिभाषित करेंगे। npm install module_name तोड़ देगा यदि आपके package.json में बकवास है।

3

आप एनपीएम @ 3 (संस्करण 3) का उपयोग कर सबसे अधिक संभावना रखते हैं।

जैसा कि दस्तावेज़ में निर्दिष्ट है, एनपीएम संस्करण 1 और 2 अधिकांश मामलों में peerDependencies स्थापित करने के लिए उपयोग किया जाता है। एनपीएम संस्करण 3 इस व्यवहार को बदलता है और अब peerDependencies इंस्टॉल नहीं करता है, लेकिन peerDependencies स्थापित नहीं होने पर इसके बजाय चेतावनी फेंक देता है।

एनपीएम संस्करण 1 और 2 स्वचालित रूप से सहकर्मी निर्भरता स्थापित करेंगे यदि वे स्पष्ट रूप से निर्भरता पेड़ में उच्च पर निर्भर नहीं हैं। एनपीएम (एनपीएम @ 3) के अगले बड़े संस्करण में, यह अब मामला नहीं होगा। आपको एक चेतावनी मिलेगी कि इसके बजाय सहकर्मी निर्भरता स्थापित नहीं है।

परिवर्तन के पीछे के कारणों ज्यादातर जब peerDependencies का उपयोग कर या समय peerDependencies का सबसे गलत तरीके से इस्तेमाल किया जा रहा एक निर्भरता नरक से बचने के लिए कर रहे थे। npm Github पर peerDependencies के बारे में this one जैसे कुछ मुद्दों को समझाते हुए peerDependencies इंस्टॉल करने के समाधान के कारण कई समस्याएं हैं।

यदि आपका आवेदन क्रैश हो जाता है यदि request स्थापित नहीं है, तो आपको अधिकतर इसकी आवश्यकता होती है। फिलहाल, NPM वातावरण में, dependencies संकुल आप require(), devDependencies हैं संकुल रहे हैं आप require() केवल विकास, परीक्षण, आदि के लिए

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

उदाहरण के लिए, ग्रंट प्लगइन्स का उपयोग ग्रंट के साथ किया जाना है, लेकिन require('grunt'); कभी नहीं। grunt को dependencies के रूप में जोड़ने से पैकेज की एक नई डाउनलोड की गई प्रतिलिपि हो जाएगी जिसका उपयोग कभी नहीं किया जाएगा। भले ही कुछ प्लगइन्स की 'मेजबान' पैकेज पर प्रत्यक्ष निर्भरता हो और dependencies में 'होस्ट' पैकेज निर्दिष्ट करें, जो 'होस्ट' पैकेज की कई प्रतियों का कारण बन जाएगा।

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

यही वह व्यवहार है जो आप वर्तमान में कर रहे हैं, आप request को peerDependencies के रूप में सूचीबद्ध कर रहे हैं, इसलिए आपको इसे काम करने और चेतावनी को हटाने के लिए इसे इंस्टॉल करना चाहिए, अन्यथा, आपको स्थानांतरित करने की आवश्यकता होगी क्लासिक dependencies पर।

+1

"एक सहकर्मी निर्भरता यह कहने का एक तरीका है कि एक मेजबान के संस्करण में प्लग किए जाने पर एक पैकेज काम करता है 'पैकेज "। ठीक ठीक। तो मेरा सवाल अभी भी है: यह कैसे चेतावनी हो सकता है? एनपीएम जानता है कि मेरा होस्ट पैकेज टूटा हुआ है और मुझे इसके बारे में चेतावनी देता है (बाहर निकलने के साथ 0)? – antpaw

+1

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

+0

यह एक अच्छा मुद्दा है, समस्या उस बिंदु का निष्पादन है। मैं 'निर्भरता' के माध्यम से स्वचालित स्थापना नहीं चाहता क्योंकि मैं उसी मॉड्यूल के दो या दो से अधिक विभिन्न संस्करणों को स्थापित कर सकता हूं, जो वास्तव में बुरा होगा मेरे उपयोगकेस (वहां बहुत सारे उपयोगकेस हैं जहां यह कोई मुद्दा नहीं है) । यही कारण है कि मैं 'सहकर्मी निर्भरता' का उपयोग कर रहा हूं। "... गायब है और आपको इसे इंस्टॉल करना चाहिए ..." एक चेतावनी "मुझे कुछ करना चाहिए", यह मुझे कोई समझ नहीं आता है? – antpaw

संबंधित मुद्दे