javascript - बोवर और एनपीएम के बीच क्या अंतर है?




npm bower (6)

bower और npm बीच मौलिक अंतर क्या है? बस कुछ सादा और सरल चाहते हैं। मैंने देखा है कि मेरे कुछ सहयोगी अपनी परियोजनाओं में एक दूसरे के बीच npm और npm उपयोग करते हैं।


2017-अक्टूबर अद्यतन

आखिरकार बोवर को deprecated दिया deprecated । कहानी का अंत।

पुराना जवाब

मैटियास पेटटर जोहानसन से, Spotify पर जावास्क्रिप्ट डेवलपर :

लगभग सभी मामलों में, बोवर पर ब्राउज़रify और एनपीएम का उपयोग करना अधिक उचित है। यह बोवर की तुलना में फ्रंट एंड ऐप के लिए बस एक बेहतर पैकेजिंग समाधान है। Spotify पर, हम पूरे वेब मॉड्यूल (एचटीएमएल, सीएसएस, जेएस) पैकेज करने के लिए एनपीएम का उपयोग करते हैं और यह बहुत अच्छी तरह से काम करता है।

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

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

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

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

(ध्यान दें कि Webpack और rollup को व्यापक रूप से अगस्त 2016 तक ब्राउज़रिफ़ी से बेहतर माना जाता है।)


Node.js के साथ काम करने वाले कई लोगों के लिए, बॉवर का एक बड़ा लाभ उन निर्भरताओं के प्रबंधन के लिए है जो जावास्क्रिप्ट नहीं हैं। यदि वे जावास्क्रिप्ट को संकलित करने वाली भाषाओं के साथ काम कर रहे हैं, तो एनपीएम का उपयोग उनकी कुछ निर्भरताओं को प्रबंधित करने के लिए किया जा सकता है। हालांकि, उनकी सभी निर्भरता नोड.जेएस मॉड्यूल नहीं होने जा रही हैं। जावास्क्रिप्ट में संकलित करने वालों में से कुछ में अजीब स्रोत भाषा विशिष्ट मैंगलिंग हो सकती है जो उपयोगकर्ताओं को स्रोत कोड की अपेक्षा करते समय जावास्क्रिप्ट को संकलित करने के लिए एक अचूक विकल्प प्रदान करता है।

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


बोवर मॉड्यूल के एक संस्करण को बनाए रखता है, यह केवल आपके लिए सही / सर्वोत्तम चुनने में आपकी सहायता करने का प्रयास करता है।

जावास्क्रिप्ट निर्भरता प्रबंधन: एनपीएम बनाम बॉवर बनाम वोल्वो?

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


मेरी टीम बोवर से दूर चली गई और एनपीएम में स्थानांतरित हो गई क्योंकि:

  • प्रोग्रामेटिक उपयोग दर्दनाक था
  • बोवर का इंटरफेस बदल रहा है
  • यूआरएल शॉर्टेंड की तरह कुछ विशेषताएं पूरी तरह टूटी हुई हैं
  • एक ही परियोजना में बोवर और एनपीएम दोनों का उपयोग दर्दनाक है
  • गिट टैग के साथ सिंक में bower.json संस्करण फ़ील्ड को रखना दर्दनाक है
  • स्रोत नियंत्रण! = पैकेज प्रबंधन
  • कॉमनजेएस समर्थन सीधा नहीं है

अधिक जानकारी के लिए, "मेरी टीम बॉवर के बजाय एनपीएम का उपयोग क्यों करती है" देखें।


http://ng-learn.org/2013/11/Bower-vs-npm/ से यह उपयोगी स्पष्टीकरण मिला

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

दूसरी ओर बॉवर को आपकी फ्रंटेंड निर्भरताओं को प्रबंधित करने के लिए बनाया गया था। JQuery, AngularJS, अंडरस्कोर, आदि जैसे पुस्तकालय। एनपीएम के समान इसकी एक फ़ाइल है जिसमें आप bower.json नामक निर्भरताओं की एक सूची निर्दिष्ट कर सकते हैं। इस मामले में आपकी फ्रंटेंड निर्भरता बॉवर इंस्टॉल चलाकर स्थापित की जाती है जो डिफ़ॉल्ट रूप से उन्हें bower_components नामक फ़ोल्डर में इंस्टॉल करती है।

जैसा कि आप देख सकते हैं, हालांकि वे एक समान कार्य करते हैं, लेकिन उन्हें पुस्तकालयों के एक बहुत अलग सेट पर लक्षित किया जाता है।


npm.js मॉड्यूल के प्रबंधन के लिए एनपीएम का सबसे अधिक उपयोग किया जाता है, लेकिन यह Browserify और / या $ npm dedupe Browserify के साथ संयुक्त होने पर फ्रंट-एंड के लिए भी काम करता है।

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

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

दोनों परियोजनाओं का उपयोग दोनों कारणों से है कि वे बोवर का उपयोग फ्रंट एंड पैकेज और एनएमपी के लिए डेवलपर टूल्स जैसे यमन, ग्रंट, गुलप, जेएसहिंट, कॉफीस्क्रिप्ट इत्यादि के लिए करते हैं।

सभी पैकेज प्रबंधकों के पास कई डाउनसाइड्स हैं। आपको सिर्फ यह चुनना है कि आप किसके साथ रह सकते हैं।

साधन







bower