जावास्क्रिप्ट निर्भरता प्रबंधन: npm बनाम बावर बनाम वोलो [बंद]


160

आप कैसे तुलना करते हैं npm, bowerऔर volo?

UI प्रोजेक्ट के लिए जावास्क्रिप्ट निर्भरता स्थापित करने के लिए इन तीनों का उपयोग किया जा सकता है। मैं समझता हूं कि npmअधिक नोड विशिष्ट है।

तो, कब क्या उपयोग करना है?

npmअभी भी दूर खड़ा है, लेकिन bowerऔर volo, ठीक उसी समस्या को हल करने लगते हैं, हालांकि मैं के बीच एक रेखा खींच कर पा रहा हूँ npmऔर bower-volo



1
यदि आप यहां इस प्रश्न को पढ़ रहे हैं और 2015 से उत्तर चाहते हैं, तो मेरा अद्यतन उत्तर देखें।
gustavohenke

जवाबों:


104

एक ऐसा वर्णन जो npm और bower के बीच के अंतर का सबसे अच्छा वर्णन करता है: npm संकुल को जावास्क्रिप्ट मॉड्यूल का प्रबंधन करता है और Bower घटकों को फ्रंट-एंड घटकों (जैसे css, html और जावास्क्रिप्ट) को प्रबंधित करता है। npm का उपयोग बोवर को स्थापित करने के लिए भी किया जाता है। यहाँ पर npm और bower (volo को कवर नहीं करता है) पर एक विस्तृत लेख दिया गया है, यह बहुत विस्तार में जाता है।


88
यह बहुत अच्छा विवरण नहीं है। Npm निश्चित रूप से फ्रंट-एंड घटकों को स्थापित करने के लिए उपयोग किया जा सकता है।
बीटी

हालाँकि मैंने देखा है कि npm पर कुछ "फ्रंटेंड" लाइब्रेरी अपने बोवर समकक्षों के पक्ष में छोड़ दी जाती हैं। उदाहरण के लिए Ember को लें , जो एक साल में प्रकाशित नहीं हुई है।
briangonzalez

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

2
यह एक बहुत ही भ्रामक जवाब है, इस बात पर विचार करते हुए कि bower में html, css और, जावास्क्रिप्ट के साथ काम करने की कोई नीति नहीं है। npm की कोई नीति नहीं है, सिवाय इसके कि npm पर लगभग सब कुछ कम से कम आमजन और कभी-कभी अन्य स्वरूपों का समर्थन करने के लिए लिखा गया है। आप html और css को npm संकुल में वैसे ही रख सकते हैं जैसे आप bower के साथ कर सकते हैं। Npm पर कई फ्रंटेंड-ओनली पैकेज हैं, जिनमें css और html शामिल हैं।
substack

3
आप उपयोग कर रहे हैं browserify , NPM सही पैकेज प्रबंधक है। मुझे नहीं लगता कि यह मायने रखता है कि आप किस पैकेज मैनेजर का उपयोग करते हैं, लेकिन मैं व्यक्तिगत रूप से सिर्फ एक प्रति प्रोजेक्ट के लिए चिपका रहूंगा।
Eruant

72

कुंज

यह अभी भी फ्रंट-एंड डेवलपर्स के बीच बहुत लोकप्रिय है, भले ही इसमें बहुत कम विशेषताएं हैं। हर फ्रंट-एंड पैकेज इसका उपयोग कर रहा है। एनपीएम में बोवर को मर्ज करने की भी एक पहल है

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

आप किसी भी चीज़ को खोजने की उम्मीद कर सकते हैं जो कि बोवर रजिस्ट्री ( bower search <some keyword>) से संबंधित है ।

volo

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

NPM

हां, npm का मतलब नोड पैकेज मैनेजर है। लेकिन आजकल आप इसे हर चीज के लिए इस्तेमाल कर सकते हैं; लोग अब केवल npm installबातें नहीं कर रहे हैं और उनसे केवल नोड वातावरण में काम करने की उम्मीद कर रहे हैं । उदाहरण के लिए, ट्विटर बूटस्ट्रैप के लिए कई npm पैकेज हैं

Npm सर्वर-साइड उपयोग के लिए अनुकूलित है, एक नेस्टेड निर्भरता ट्री के साथ। प्रत्येक निर्भरता की अपनी निर्भरताएं हो सकती हैं जो उनकी अपनी हो सकती हैं, और इसी तरह। यह निर्भरता संस्करण विरोधों को समाप्त करता है क्योंकि प्रत्येक निर्भरता उदाहरण के अपने संस्करण का उपयोग कर सकती है जैसे अंडरस्कोर। हालाँकि, आगामी npm संस्करण 3 निर्भरता के पेड़ को समतल कर देगा :

Npm @ 3 के साथ, आपकी node_modules निर्देशिका बहुत चापलूसी होगी। आपकी सभी निर्भरताएँ और आपकी अधिकांश निर्भरताएँ (और (उप) + निर्भरताएँ) शीर्ष स्तर पर एक दूसरे के बगल में बैठी होंगी। केवल जब संघर्ष होते हैं तो मॉड्यूल को गहरे स्तर पर स्थापित किया जाएगा। यह विंडोज उपयोगकर्ताओं के लिए चीजों को बहुत आसान बनाना चाहिए।

एनपीएम का उपयोग करने पर मुझे कुछ फायदे:

  • इसका उपयोग अन्य सभी पैकेज प्रबंधकों (घटक, बोवर, वोलो, जेएसपीएम, आदि) द्वारा किया जाता है;
  • स्क्रिप्ट बनाने की अनुमति देता है;
  • Npm- आधारित पैकेजों को देखने के लिए बहुत सारे उपकरण उपलब्ध हैं

npm जावास्क्रिप्ट के लिए पैकेज मैनेजर है।

npmjs.com स्क्रीनशॉट


2013 की फरवरी के अनुसार, मेरी राय निम्नलिखित थी। कृपया इसे ध्यान में न रखें।

NPM

जब आप एक नोड परियोजना के साथ होते हैं, तो इसके साथ रहना बेहतर होता है, बहुत कम परियोजनाएं हैं जो ब्राउज़रों के लिए भी उपलब्ध हैं ...

कुंज

बोवर अभी पॉप लड़का है। उनके हुड के तहत बहुत सारी परियोजनाएं हैं, और परियोजना के रखवाले उन्हें बोवर रजिस्ट्री में अप-टू-डेट रखना पसंद करते हैं ...

यह शर्म की बात है कि वह कभी-कभी थोड़ी छोटी है।

volo

मैंने ऐसा करने के बाद 5 मिनट से अधिक के लिए वोलो की कोशिश नहीं की है, लेकिन जो मैं देख सकता था वह बोवर की तुलना में अधिक लचीला लग रहा है।

वोलो के लिए एक नकारात्मक बिंदु यह है कि उनकी परियोजनाएं बहुत पुरानी हैं।


19
एनपीएम पर हजारों मॉड्यूल हैं जो या तो केवल ब्राउज़र में काम करते हैं या नोड और ब्राउज़र दोनों में काम करते हैं। उनमें से कई में ci बैज भी है जो आपको बताता है कि वे कौन से ब्राउजर्स में काम करते हैं। सबसे ज्यादा bower et all पर शायद npm पर है।
प्रतिस्थापित करें

मुझे समझ में नहीं आता कि प्रोजेक्ट के लिए एनबॉयलरप्लेट जैसे बोवर का इस्तेमाल करना चाहिए, जबकि यह पहले से ही इंस्टॉलेशन के लिए
npm

5
एक "पॉप आदमी" क्या है? "पॉप" एक एब्डर्व है। "लोकप्रिय" के लिए?
ब्रायन ओकले

4
आपके स्क्रीनशॉट में npm का मतलब है परमाणु नियोजन नियमावली;)
जिम जोन्स

24

वे एक ही समस्या को हल करने के लिए लग रहे हैं लेकिन विभिन्न वातावरण / दुनिया के लिए। एनपीएम नोडोज और वोलो के लिए, ब्राउजर के लिए बोवर।

सच्चाई यह है कि आप ब्राउज़र के लिए जावास्क्रिप्ट और सीएसएस का प्रबंधन करने के लिए एनपीएम का भी उपयोग कर सकते हैं। आपको ऐसा करने से कुछ भी नहीं रोक रहा है। उस लिहाज से एनपीएम का उपयोग करना मेरे लिए एक ही उद्देश्य के लिए दो अलग-अलग साधनों का प्रबंधन करने की तुलना में अधिक स्वाभाविक लगता है।

ऐसा लगता है कि बोवर के पास अधिक पैकेज उपलब्ध हैं, कम से कम अधिक लोकप्रिय लोगों के लिए। लेकिन जल्द ही jQuery भी सीधे एनपीएम में उपलब्ध होगा और संभवत: अन्य सभी पुस्तकालय भी इसी प्रवृत्ति का पालन करेंगे।

मेरी राय में, के बाद से वहाँ की तरह उपकरण हैं browserify और webmake वहाँ बाहर, ब्राउज़र में है कि मदद के उपयोग नोड मॉड्यूल, वहाँ अब और नहीं के लिए एक असली जरूरत है बोवर या volo , जब तक वे (आप के लिए कुछ और की पेशकश एक विशेष मॉड्यूल केवल में मौजूदा उनकी रजिस्ट्रियां)।

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

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


1
एक ही समस्या के लिए प्रतिस्पर्धी समाधान होना अच्छा है। किसी भी विचार क्यों yeomanपरियोजना एक नए पैकेज प्रबंधक के साथ आने के लिए चुना जब हम पहले से ही था npm? (यह परिपक्व था, प्रसिद्ध और सुविधा संपन्न) यह विचार मुझे महसूस करता है कि मैं अभी भी वास्तविक बिंदु को याद कर रहा हूं।
युगल जिंदल

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

मुझे लगता है कि वे npmसीमावर्ती सादगी के पक्ष में परेशानी को अलग करना चाहते थे । इसलिए सीमांत विकास के लिए।
युगल जिंदल

15

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

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


3
यह केवल तभी सच होता है जब आप अपने फ्रंटएंड कोड को उस फ़ोल्डर से सीधे सेवा दे रहे होते हैं जिसे पैकेज मैनेजर उन फाइलों में डालता है। मेरे मामले में मेरे पास या तो कम / js फ़ाइलों को संसाधित करने के लिए स्क्रिप्ट है या उन फ़ाइलों से एक बंडल बनाने के लिए ब्राउज़राइज़ करें। तो यह वास्तव में मेरे मामले में एक बड़ा मुद्दा नहीं है। वितरित किए जा रहे कोड में हमेशा सही संस्करण होते हैं, यहां तक ​​कि जब अन्य उपसंपादकों के पास विकास के दौरान डुप्लिकेट हो सकते हैं, तो वे कभी भी उत्पादन नहीं करते हैं।
रॉय रिओजस

यहां तक ​​कि अगर आप अनजाने में (उप-निर्भरता के रूप में) एक ही निर्भरता के दो अलग-अलग संस्करण चाहते हैं? मुझे लगता है कि इस मामले में आप गलत हैं
wheresrhys

मुझे आमतौर पर उन मॉड्यूलों की आवश्यकता नहीं है जिन्हें मैं नियंत्रित नहीं करता हूं, इसलिए वे हमेशा सही होंगे ... यदि अनजाने में एक मॉड्यूल किसी दिए गए मॉड्यूल की आवश्यकता होती है, तो शिममेड से बाहर का निर्माण विफल हो जाएगा। मेरे मामले में बोवर का उपयोग करने का कोई मतलब नहीं है, कोई फायदा नहीं हुआ
रॉय रिओजस

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

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

5

मुझे पता है कि यह सवाल के दायरे में नहीं है, लेकिन एक और विकल्प भी है। जैम जेएस - http://jamjs.org/ एक दिलचस्प बात यह है कि जाम में इसकी गंभीर क्षमताएं हैं:

jam compile output.js

किसी को अभी तक एक और पैकेज प्रबंधक बनाना चाहिए और इसे नाम देना चाहिए: yapm :)


5
आपकी इच्छा दी गई है: github.com/rlidwka/yapm : P
alex

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

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