एनपीएम बनाम बोवर बनाम ब्राउजर बनाम गुलप बनाम ग्रंट बनाम वेबपैक


1886

मैं सबसे लोकप्रिय जावास्क्रिप्ट पैकेज प्रबंधकों, बंडलों और टास्क रनर के बारे में अपने ज्ञान को संक्षेप में प्रस्तुत करने की कोशिश कर रहा हूं। मुझे सही जवाब दो अगर मैं गलत हूँ:

  • npm& bowerपैकेज मैनेजर हैं। वे सिर्फ निर्भरता डाउनलोड करते हैं और अपने दम पर प्रोजेक्ट बनाने का तरीका नहीं जानते हैं। क्या वे जानते हैं कि कॉल करने के लिए है webpack/ gulp/ gruntसभी निर्भरता प्राप्त करने में कठिनाई के बाद।
  • bowerकी तरह है npm, लेकिन एक चपटा निर्भरता के पेड़ बनाता है (इसके विपरीत npmयह पुनरावर्ती करता है)। मतलब npmप्रत्येक निर्भरता के लिए निर्भरताएं प्राप्त करता है (एक ही बार में एक ही प्राप्त कर सकता है), जबकि bowerआपसे मैन्युअल रूप से उप-निर्भरताओं को शामिल करने की अपेक्षा करता है। कभी-कभी bowerऔर npmक्रमशः फ्रंट-एंड और बैक-एंड के लिए उपयोग किया जाता है (क्योंकि प्रत्येक मेगाबाइट सामने के अंत में मायने रखता है)।
  • gruntऔर gulpजो कुछ भी स्वचालित किया जा सकता है उसे स्वचालित करने के लिए कार्य धावक हैं (यानी सीएसएस / सैस संकलित करें, छवियों का अनुकूलन करें, एक बंडल बनाएं और इसे छोटा करें / ट्रांसपाइल करें)।
  • gruntबनाम gulp( mavenबनाम बनाम gradleया कॉन्फ़िगरेशन बनाम कोड की तरह है)। ग्रंट अलग-अलग स्वतंत्र कार्यों को कॉन्फ़िगर करने पर आधारित है, प्रत्येक कार्य फ़ाइल को खोलता / संभालता / बंद करता है। गुल को कोड की कम मात्रा की आवश्यकता होती है और यह नोड धाराओं पर आधारित होता है, जो इसे पाइप चेन (उसी फ़ाइल को फिर से खोलना w / o) बनाने की अनुमति देता है और इसे तेज़ बनाता है।
  • webpack( webpack-dev-server) - मेरे लिए यह परिवर्तन के गर्म पुनः लोड के साथ एक कार्य धावक है जो आपको सभी जेएस / सीएसएस देखने वालों के बारे में भूलने की अनुमति देता है।
  • npm/ bower+ प्लगइन्स कार्य चलाने वालों की जगह ले सकता है। यदि आप का उपयोग करने की जरूरत है gulp/ gruntअधिक npm+ प्लगइन्स हैं तो उनकी क्षमता अक्सर अंतर हो जाती है । लेकिन टास्क रनर्स निश्चित रूप से जटिल कार्यों के लिए बेहतर होते हैं (जैसे "प्रत्येक बिल्ड पर बंडल बनाते हैं, ES6 से ES5 तक ट्रांसपाइल, इसे सभी ब्राउज़र एमुलेटर पर चलाते हैं, स्क्रीनशॉट बनाते हैं और एफ़टीपी के माध्यम से ड्रॉपबॉक्स में तैनात होते हैं")।
  • browserifyब्राउज़रों के लिए पैकेजिंग नोड मॉड्यूल की अनुमति देता है। browserifyबनाम nodeकी requireवास्तव में है एएमडी CommonJS बनाम

प्रशन:

  1. क्या है webpackऔर webpack-dev-server? आधिकारिक दस्तावेज कहते हैं कि यह एक मॉड्यूल बंडलर है, लेकिन मेरे लिए यह सिर्फ एक कार्य धावक है। क्या फर्क पड़ता है?
  2. आप कहां इस्तेमाल करेंगे browserify? क्या हम नोड / ES6 आयात के साथ भी ऐसा नहीं कर सकते हैं?
  3. आप कब उपयोग करेंगे gulp/ gruntअधिक npm+ प्लगइन्स?
  4. कृपया उदाहरण प्रदान करें जब आपको संयोजन का उपयोग करने की आवश्यकता हो

52
रोलअप में जोड़ने का समय ? 😝
GMAN

167
यह एक बहुत ही उचित प्रश्न है। मेरे जैसे छद्म वेब-
देवता


41
@ फ़िशरमैन मैं इसके लिए बिल्कुल नया हूँ, और यह पूरी तरह से पागल लगता है ...
डेविड स्टोसिक

13
@ फ़िशरमैन "अनुशंसित" टिप्पणी जो मैंने अभी पढ़ी थी वह और भी खराब थी! डी: मैं बस एक फ्रैस्टिंग स्टैटिक पेज बनाना चाहता हूं जो सीएसएस / जेएस के कुछ जोड़े का उपयोग करता है, और एक ऐसा टूल होने से फायदा होगा जो एक साथ मिल सके ... अपने Ctrl-C को थोड़ा आराम देने के लिए कुछ टेम्प्लेटिंग इंजन में फेंक दें। / Ctrl-V उंगलियां, और यह बिल्कुल सही होगा ... और फिर भी, इसमें घंटे, अभी भी जाने का रास्ता खोजने की कोशिश कर रहा है ...
डेविड स्टोसिक

जवाबों:


1027

Webpack और Browserify

Webpack और Browserify बहुत ही काम करते हैं, जो आपके कोड को लक्ष्य वातावरण में उपयोग करने के लिए संसाधित कर रहा है (मुख्य रूप से ब्राउज़र, हालांकि आप नोड जैसे अन्य वातावरणों को लक्षित कर सकते हैं)। इस तरह के प्रसंस्करण का परिणाम एक या अधिक बंडल है - लक्षित वातावरण के लिए उपयुक्त इकट्ठे स्क्रिप्ट।

उदाहरण के लिए, मान लीजिए कि आपने मॉड्यूल में विभाजित ES6 कोड लिखा है और इसे एक ब्राउज़र में चलाना चाहते हैं। यदि वे मॉड्यूल नोड मॉड्यूल हैं, तो ब्राउज़र उन्हें समझ नहीं पाएगा क्योंकि वे केवल नोड वातावरण में मौजूद हैं। ES6 मॉड्यूल IE11 जैसे पुराने ब्राउज़र में भी काम नहीं करेगा। इसके अलावा, आपने प्रायोगिक भाषा सुविधाओं (ES अगले प्रस्ताव) का उपयोग किया हो सकता है कि ब्राउज़र अभी तक लागू नहीं होते हैं इसलिए ऐसी स्क्रिप्ट को चलाना केवल त्रुटियां हैं। Webpack और Browserify जैसे उपकरण इन समस्याओं को ऐसे कोड के रूप में परिवर्तित करके हल करते हैं जिन्हें ब्राउज़र निष्पादित कर पाता है । उसके ऊपर, वे उन बंडलों पर कई प्रकार के अनुकूलन लागू करना संभव बनाते हैं।

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


वेबपैक देव सर्वर

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


टास्क रनर बनाम एनपीएम स्क्रिप्ट

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

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


उदाहरण

उदाहरणों के अनुसार, मेरा सुझाव है कि आप इस रिएक्टर स्टार्टर प्रोजेक्ट पर एक नज़र डालें , जो आपको एनपीएम और जेएस लिपियों का एक अच्छा संयोजन दिखाता है जो पूरे निर्माण और तैनाती प्रक्रिया को कवर करता है। आप उन एनपीएम लिपियों package.jsonको रूट फ़ोल्डर में देख सकते हैं, जिनके नाम पर प्रॉपर्टी है scripts। वहाँ आप ज्यादातर कमांड का सामना करेंगे babel-node tools/run start। बैबल-नोड एक सीएलआई उपकरण है (उत्पादन उपयोग के लिए नहीं), जो पहले tools/runईएस 6 फ़ाइल ( उपकरण में स्थित रन.जेएस फ़ाइल ) को संकलित करता है - मूल रूप से एक धावक उपयोगिता है। यह धावक एक फ़ंक्शन को एक तर्क के रूप में लेता है और इसे निष्पादित करता है, जो इस मामले में है start- एक और उपयोगिता (start.js) स्रोत फ़ाइलों (क्लाइंट और सर्वर दोनों) को बंडल करने और एप्लिकेशन और डेवलपमेंट सर्वर (देव सर्वर शायद या तो वेबपैक देव सर्वर या ब्राउजरसिंक होगा) के लिए जिम्मेदार है।

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

const bs = Browsersync.create();  
bs.init({
      ...(DEBUG ? {} : { notify: false, ui: false }),

      proxy: {
        target: host,
        middleware: [wpMiddleware, ...hotMiddlewares],
      },

      // no need to watch '*.js' here, webpack will take care of it for us,
      // including full page reloads if HMR won't work
      files: ['build/content/**/*.*'],
}, resolve)

महत्वपूर्ण हिस्सा है proxy.target, जहां वे सर्वर एड्रेस सेट करते हैं जिसे वे प्रॉक्सी करना चाहते हैं, जो http: // localhost: 3000 हो सकता है , और ब्राउजरसिंक http: // localhost: 3001 पर एक सर्वर शुरू करता है , जहां उत्पन्न संपत्ति को स्वचालित परिवर्तन के साथ परोसा जाता है। पता लगाने और गर्म मॉड्यूल प्रतिस्थापन जैसा कि आप देख सकते हैं, filesअलग-अलग फ़ाइलों या पैटर्न के साथ एक और कॉन्फ़िगरेशन संपत्ति है ब्राउज़र-सिंक परिवर्तनों के लिए देखता है और कुछ होने पर ब्राउज़र को फिर से लोड करता है, लेकिन जैसा कि टिप्पणी कहती है, वेबपैक एचएमआर के साथ स्वयं द्वारा js स्रोतों को देखने का ख्याल रखता है, इसलिए वे सहयोग करते हैं वहाँ।

अब मेरे पास इस तरह के ग्रंट या गल्प विन्यास का कोई समकक्ष उदाहरण नहीं है, लेकिन गल्प (और ग्रंट के साथ कुछ इसी तरह) के साथ आप gulpfile.js में व्यक्तिगत कार्य लिखेंगे

gulp.task('bundle', function() {
  // bundling source files with some gulp plugins like gulp-webpack maybe
});

gulp.task('start', function() {
  // starting server and stuff
});

जहाँ आप स्टार्टर-किट में अनिवार्य रूप से बहुत कुछ कर रहे होंगे, इस बार टास्क रनर के साथ, जो आपके लिए कुछ समस्याओं को हल करता है, लेकिन उपयोग सीखने के दौरान अपने स्वयं के मुद्दों और कुछ कठिनाइयों को प्रस्तुत करता है, और जैसा कि मैं कहता हूं, आपके पास जितनी अधिक निर्भरताएं हैं, उतना ही गलत हो सकता है। और यही कारण है कि मुझे ऐसे उपकरणों से छुटकारा पाना पसंद है।


3
बहुत बढ़िया जवाब! क्या आप pls का वर्णन कर सकते हैं जिस तरह से वेबपैक / ब्राउज़र ब्राउज़र में पुन: उपयोग नोड मॉड्यूल का प्रबंधन करें?
VB_

4
Webpack असेंबली निर्भरता (निर्यात मॉड्यूल मान) को ऑब्जेक्ट में स्थापित करता है (InstallModules)। प्रत्येक मॉड्यूल इसलिए उस वस्तु की संपत्ति है और ऐसी संपत्ति का नाम इसकी आईडी (उदाहरण 1, 2, 3 ... आदि) का प्रतिनिधित्व करता है। हर बार जब आपको अपने स्रोत में इस तरह के मॉड्यूल की आवश्यकता होती है, तो वेबपैक मान को फ़ंक्शन आईडी में मॉड्यूल आईडी के साथ तर्क में बदल देता है (जैसे। __webpack_require __ (1)), जो मॉड्यूल आईडी में इंस्टॉल किए गए मोड पर खोज के आधार पर सही निर्भरता देता है। मुझे यकीन नहीं है, कि Browserify इसे कैसे संभालता है।
दान मैक

क्या आप अधिक विस्तृत कर सकते हैं?
असीम केटी

1
मैं गल्प या ग्रंट के बुनियादी उपयोग को प्रस्तुत करने से सहमत नहीं हूं, इन दोनों को गूगल, वेबपैक-देव-सर्वर का उपयोग करने से तुलना करना आसान है, पहले वेबपैक को समझने की आवश्यकता है, और यह इस प्रश्न / उत्तर के दायरे से बाहर है, लेकिन मैंने प्रस्तुत किया है कुछ ब्राउजरसिंक कॉन्फिग। आप स्टार्टर-किट के साथ सही हैं, और मैंने इस पर अधिक विस्तार किया है।
बजे डैन मैकक सिप

5
+1 (अधिक) लोकप्रिय राय का पालन करने के बजाय चीजों को सरल रखने के लिए निर्भरता कम करने के लिए कि हर नए पैकेज का उपयोग किया जाना चाहिए!
मदनसे

675

अपडेट अक्टूबर 2018

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

https://github.com/kamranahmedse/developer-roadmap

अपडेट जून 2018

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

https://medium.com/the-node-js-collection/modern-javascript-explained-for-dinosaurs-f695e9747b70

जुलाई 2017 को अपडेट करें

हाल ही में मैंने 2017 में फ्रंट-एंड डेवलपमेंट को कैसे एप्रोच किया जाए, इसके बारे में ग्रैब टीम से एक बहुत व्यापक गाइड पाया। आप इसे नीचे की तरह देख सकते हैं।

https://github.com/grab/front-end-guide


मैं इसके लिए काफी समय से खोज कर रहा हूं क्योंकि वहां बहुत सारे उपकरण हैं और उनमें से प्रत्येक हमें एक अलग पहलू में लाभान्वित करता है। समुदाय को उपकरणों की तरह विभाजित किया गया है Browserify, Webpack, jspm, Grunt and Gulp। जिसके बारे में आप भी सुन सकते हैं Yeoman or Slush। यह वास्तव में कोई समस्या नहीं है, यह सिर्फ एक स्पष्ट मार्ग को समझने की कोशिश कर रहे सभी के लिए भ्रमित करने वाला है।

वैसे भी, मैं कुछ योगदान देना चाहूंगा।

1. पैकेज मैनेजर

पैकेज प्रबंधक प्रोजेक्ट की निर्भरता को स्थापित करने और अद्यतन करने को सरल बनाते हैं, जो कि पुस्तकालय हैं जैसे: jQuery, Bootstrapआदि - सब कुछ जो आपकी साइट पर उपयोग किया जाता है और आपके लिए नहीं लिखा जाता है।

सभी पुस्तकालय वेबसाइटों को ब्राउज़ करना, अभिलेखागार को डाउनलोड करना और खोलना, फाइलों को परियोजनाओं में कॉपी करना - यह सब टर्मिनल में कुछ कमांड के साथ बदल दिया जाता है।

  • NPMइसके लिए खड़ा है: Node JS package managerआपके सॉफ्टवेयर पर निर्भर सभी पुस्तकालयों का प्रबंधन करने में आपकी मदद करता है। आप कमांड लाइन में एक फ़ाइल में अपनी आवश्यकताओं को परिभाषित करते हैं package.jsonऔर चलाते हैं npm install... फिर BANG, आपके पैकेज डाउनलोड किए जाते हैं और उपयोग के लिए तैयार हैं। दोनों front-end and back-endपुस्तकालयों के लिए इस्तेमाल किया जा सकता है ।

  • Bower: फ्रंट-एंड पैकेज प्रबंधन के लिए, अवधारणा एनपीएम के साथ समान है। आपकी सभी लाइब्रेरी नाम की फ़ाइल में संग्रहीत हैं bower.jsonऔर फिर bower installकमांड लाइन में चलती हैं ।

बीच सबसे बड़ा अंतर Bowerहै और NPMजबकि बोवर नीचे के रूप में एक फ्लैट निर्भरता वृक्ष की आवश्यकता है कि NPM नेस्टेड निर्भरता पेड़ करता है।

से हवाला देते हुए क्या बोवर और NPM के बीच का अंतर है?

NPM

project root
[node_modules] // default directory for dependencies
 -> dependency A
 -> dependency B
    [node_modules]
    -> dependency A

 -> dependency C
    [node_modules]
    -> dependency B
      [node_modules]
       -> dependency A 
    -> dependency D

कुंज

project root
[bower_components] // default directory for dependencies
 -> dependency A
 -> dependency B // needs A
 -> dependency C // needs B and D
 -> dependency D

कुछ अपडेट हैं npm 3 Duplication and Deduplication, कृपया अधिक विवरण के लिए डॉक्टर को खोलें।

  • Yarn: के लिए एक नया पैकेज प्रबंधक JavaScript प्रकाशित द्वारा Facebookहाल ही में की तुलना में कुछ अधिक लाभ के साथ NPM। और यार्न के साथ, आप अभी भी पैकेज लाने के लिए दोनों NPMऔर Bowerरजिस्ट्री का उपयोग कर सकते हैं । यदि आपने पहले एक पैकेज स्थापित किया है, तो yarnएक कैश्ड प्रतिलिपि बनाता है जो सुविधा देता है offline package installs

  • jspm: SystemJSयूनिवर्सल मॉड्यूल लोडर के लिए एक पैकेज मैनेजर है , जो डायनेमिक ES6मॉड्यूल लोडर के ऊपर बनाया गया है । यह नियमों के अपने सेट के साथ एक पूरी तरह से नया पैकेज प्रबंधक नहीं है, बल्कि यह मौजूदा पैकेज स्रोतों के शीर्ष पर काम करता है। बॉक्स से बाहर, यह GitHubऔर के साथ काम करता है npm। जैसा कि अधिकांश Bowerआधारित पैकेजों पर आधारित है GitHub, हम उन पैकेजों का उपयोग करके भी स्थापित कर सकते हैं jspm। इसकी एक रजिस्ट्री है जो आसान स्थापना के लिए आमतौर पर उपयोग किए जाने वाले फ्रंट-एंड पैकेजों की सूची देती है।

के बीच अलग देखें Bowerऔर jspm: पैकेज मैनेजर: बोवर बनाम जेएसपीएम


2. मॉड्यूल लोडर / बंडलिंग

किसी भी पैमाने की अधिकांश परियोजनाओं में कई फाइलों के बीच उनका कोड विभाजित होगा। आप बस प्रत्येक फ़ाइल को एक व्यक्तिगत <script>टैग के साथ शामिल कर सकते हैं , हालांकि, <script>एक नया http कनेक्शन स्थापित करता है, और छोटी फ़ाइलों के लिए - जो प्रतिरूपता का एक लक्ष्य है - कनेक्शन सेट करने का समय डेटा स्थानांतरित करने की तुलना में काफी अधिक समय ले सकता है। जबकि स्क्रिप्ट डाउनलोड हो रही हैं, पृष्ठ पर कोई भी सामग्री नहीं बदली जा सकती।

  • डाउनलोड समय की समस्या को बड़े पैमाने पर सरल मॉड्यूल के एक समूह को एक फ़ाइल में समाहित करके और इसे छोटा करके हल किया जा सकता है।

उदाहरण के लिए

<head>
    <title>Wagon</title>
    <script src=“build/wagon-bundle.js”></script>
</head>
  • प्रदर्शन हालांकि लचीलेपन की कीमत पर आता है। यदि आपके मॉड्यूल में अंतर-निर्भरता है, तो लचीलेपन की यह कमी एक शोस्टॉपर हो सकती है।

उदाहरण के लिए

<head>
    <title>Skateboard</title>
    <script src=“connectors/axle.js”></script>
    <script src=“frames/board.js”></script>
    <!-- skateboard-wheel and ball-bearing both depend on abstract-rolling-thing -->
    <script src=“rolling-things/abstract-rolling-thing.js”></script>
    <script src=“rolling-things/wheels/skateboard-wheel.js”></script>
    <!-- but if skateboard-wheel also depends on ball-bearing -->
    <!-- then having this script tag here could cause a problem -->
    <script src=“rolling-things/ball-bearing.js”></script>
    <!-- connect wheels to axle and axle to frame -->
    <script src=“vehicles/skateboard/our-sk8bd-init.js”></script>
</head>

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

तब हमने सुना के बारे में RequireJS, Browserify, WebpackऔरSystemJS

  • RequireJS: एक JavaScriptफ़ाइल और मॉड्यूल लोडर है। यह ब्राउज़र के उपयोग के लिए अनुकूलित है, लेकिन इसका उपयोग अन्य जावास्क्रिप्ट वातावरणों में किया जा सकता है, जैसे Node

जैसे: myModule.js

// package/lib is a dependency we require
define(["package/lib"], function (lib) {

    // behavior for our module
    function foo() {
        lib.log( "hello world!" );
    }

    // export (expose) foo to other modules as foobar
    return {
        foobar: foo
    }
});

में main.js, हम myModule.jsनिर्भरता के रूप में आयात कर सकते हैं और इसका उपयोग कर सकते हैं।

require(["package/myModule"], function(myModule) {
    myModule.foobar();
});

और फिर हमारे में HTML, हम के साथ उपयोग करने के लिए संदर्भित कर सकते हैं RequireJS

<script src=“app/require.js data-main=“main.js ></script>

CommonJSऔर अधिक पढ़ें और AMDआसानी से समझ पाने के लिए। कॉमनजेएस, एएमडी और रिक्जेजेएस के बीच संबंध?

  • Browserify: CommonJSब्राउज़र में स्वरूपित मॉड्यूल के उपयोग की अनुमति देने के लिए निर्धारित किया गया है। नतीजतन, Browserifyएक मॉड्यूल बंडलर के रूप में एक मॉड्यूल लोडर नहीं है: Browserifyपूरी तरह से एक बिल्ड-टाइम टूल है, कोड का एक बंडल का उत्पादन करता है जिसे फिर क्लाइंट-साइड लोड किया जा सकता है।

एक निर्माण मशीन के साथ शुरू करें जिसमें नोड और एनपीएम स्थापित है, और पैकेज प्राप्त करें:

npm install -g save-dev browserify

CommonJSप्रारूप में अपने मॉड्यूल लिखें

//entry-point.js
var foo = require('../foo.js');
console.log(foo(4));

और खुश होने पर, बंडल करने के लिए आदेश जारी करें:

browserify entry-point.js -o bundle-name.js

ब्राउज़र को पुन: प्रवेश-बिंदु की सभी निर्भरता का पता लगाता है और उन्हें एक एकल फ़ाइल में संयोजित करता है:

<script src=”bundle-name.js”></script>
  • Webpack: यह आपकी सभी स्टैटिक एसेट्स, जिसमें JavaScriptइमेज, सीएसएस और बहुत कुछ शामिल हैं, एक सिंगल फाइल में बंडल करता है। यह आपको विभिन्न प्रकार के लोडर के माध्यम से फ़ाइलों को संसाधित करने में भी सक्षम बनाता है। आप अपने या मॉड्यूल सिंटैक्स के JavaScriptसाथ लिख सकते हैं । यह मूलभूत रूप से अधिक एकीकृत और राय वाले तरीके से बिल्ड समस्या पर हमला करता है। में आप का उपयोग और काम किया जाना रूपांतरण और प्लग इन की एक लंबी सूची। उस बॉक्स से पर्याप्त शक्ति प्रदान करता है जिसकी आपको आमतौर पर आवश्यकता नहीं है या बिल्कुल नहीं है ।CommonJSAMDBrowserifyGulp/GruntWebpackGruntGulp

बुनियादी उपयोग सरल से परे है। Browserify जैसे वेबपैक स्थापित करें:

npm install -g save-dev webpack

और कमांड को एक एंट्री पॉइंट और एक आउटपुट फाइल पास करें:

webpack ./entry-point.js bundle-name.js
  • SystemJS: एक मॉड्यूल लोडर है जो आज इस्तेमाल किए गए किसी भी लोकप्रिय प्रारूप में रन टाइम पर मॉड्यूल आयात कर सकता है ( CommonJS, UMD, AMD, ES6)। यह ES6मॉड्यूल लोडर पॉलीफिल के ऊपर बनाया गया है और उपयोग किए जा रहे प्रारूप का पता लगाने और इसे उचित तरीके से संभालने के लिए पर्याप्त स्मार्ट है। SystemJSभी ES6 कोड (साथ transpile कर सकते हैं Babelया Traceur) या इस तरह के रूप में अन्य भाषाओं TypeScriptऔर CoffeeScriptप्लग इन का उपयोग।

जानना चाहते हैं कि क्या है node moduleऔर क्यों यह ब्राउज़र में अच्छी तरह से अनुकूलित नहीं है।

अधिक उपयोगी लेख:


क्यों jspmऔर SystemJSकैसे?

ES6प्रतिरूपकता के मुख्य लक्ष्यों में से एक यह है कि इंटरनेट ( Githubऔर npm, आदि) पर कहीं से भी किसी भी जावास्क्रिप्ट लाइब्रेरी को स्थापित करना और उसका उपयोग करना वास्तव में सरल है । केवल दो चीजों की जरूरत है:

  • पुस्तकालय स्थापित करने के लिए एक एकल आदेश
  • पुस्तकालय को आयात करने और इसका उपयोग करने के लिए कोड की एक एकल पंक्ति

तो jspm, आप इसे कर सकते हैं।

  1. आदेश के साथ लाइब्रेरी स्थापित करें: jspm install jquery
  2. कोड की एक पंक्ति के साथ पुस्तकालय आयात करें, आपको HTML फ़ाइल के अंदर बाहरी संदर्भ की आवश्यकता नहीं है।

display.js

var $ = require('jquery'); 

$('body').append("I've imported jQuery!");
  1. फिर आप System.config({ ... })अपने मॉड्यूल को आयात करने से पहले इन चीजों को कॉन्फ़िगर करते हैं । आम तौर पर जब चलाया जाता है jspm init, तो config.jsइस उद्देश्य के लिए नाम वाली एक फ़ाइल होगी ।

  2. ये स्क्रिप्ट चलाने बनाने के लिए हम लोड करने की आवश्यकता है system.jsऔर config.jsHTML पृष्ठ पर। उसके बाद हम मॉड्यूल लोडर display.jsका उपयोग करके फ़ाइल को लोड करेंगे SystemJS

index.html

<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
  System.import("scripts/display.js");
</script>

ने कहा: तुम भी उपयोग कर सकते हैं npmके साथ Webpackके रूप में कोणीय 2 इसे लागू किया गया है। चूंकि jspmइसे एकीकृत करने के लिए विकसित किया गया था SystemJSऔर यह मौजूदा npmस्रोत के शीर्ष पर काम करता है , इसलिए आपका जवाब आपके ऊपर है।


3. टास्क रनर

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

  • Grunt: आप अपने विकास के वातावरण के लिए स्वचालन को पूर्व-प्रक्रिया कोड में बना सकते हैं या एक कॉन्फ़िगर फ़ाइल के साथ स्क्रिप्ट बना सकते हैं और एक जटिल कार्य को संभालना बहुत मुश्किल लगता है। पिछले कुछ वर्षों में लोकप्रिय है।

प्रत्येक कार्य में Gruntअलग-अलग प्लगइन कॉन्फ़िगरेशन की एक सरणी होती है, जो कि एक के बाद एक कड़ाई से स्वतंत्र, और अनुक्रमिक फैशन में निष्पादित होती है।

grunt.initConfig({
  clean: {
    src: ['build/app.js', 'build/vendor.js']
  },

  copy: {
    files: [{
      src: 'build/app.js',
      dest: 'build/dist/app.js'
    }]
  }

  concat: {
    'build/app.js': ['build/vendors.js', 'build/app.js']
  }

  // ... other task configurations ...

});

grunt.registerTask('build', ['clean', 'bower', 'browserify', 'concat', 'copy']);
  • Gulp: स्वचालन की तरह Gruntलेकिन विन्यास के बजाय, आप JavaScriptधाराओं के साथ लिख सकते हैं जैसे कि यह एक नोड अनुप्रयोग है। इन दिनों को प्राथमिकता दें।

यह एक Gulpनमूना कार्य घोषणा है।

//import the necessary gulp plugins
var gulp = require('gulp');
var sass = require('gulp-sass');
var minifyCss = require('gulp-minify-css');
var rename = require('gulp-rename');

//declare the task
gulp.task('sass', function(done) {
  gulp.src('./scss/ionic.app.scss')
    .pipe(sass())
    .pipe(gulp.dest('./www/css/'))
    .pipe(minifyCss({
      keepSpecialComments: 0
    }))
    .pipe(rename({ extname: '.min.css' }))
    .pipe(gulp.dest('./www/css/'))
    .on('end', done);
});

और देखें: https://medium.com/@preslavrachev/gulp-vs-grunt-why-one-why-the-other-f5d3b398edc4#.fte0nahri


4. मचान उपकरण

  • Slush and Yeoman: आप उनके साथ स्टार्टर प्रोजेक्ट बना सकते हैं। उदाहरण के लिए, आप HTML और SCSS के साथ एक प्रोटोटाइप बनाने की योजना बना रहे हैं, फिर मैन्युअल रूप से कुछ फ़ोल्डर जैसे कि scss, css, img, फ़ॉन्ट्स बनाएं। आप बस yeomanएक साधारण स्क्रिप्ट स्थापित और चला सकते हैं । फिर यहां आपके लिए सब कुछ।

अधिक जानकारी प्राप्त करें यहाँ

npm install -g yo
npm install --global generator-h5bp
yo h5bp

और देखें: https://www.quora.com/What-are-the-differences-between-NPM-Bower-Grunt-Gulp-Webpack-Browserify-Slush-Yeoman-and-Express


मेरा उत्तर वास्तव में प्रश्न की सामग्री से मेल नहीं खाता है, लेकिन जब मैं Google पर इन ज्ञान की खोज कर रहा हूं, तो मैं हमेशा प्रश्न को शीर्ष पर देखता हूं, इसलिए मैंने सारांश में इसका उत्तर देने का फैसला किया। आशा है कि आप लोगों को यह मददगार लगा होगा।


64

ठीक है, उन सभी को कुछ समानताएं मिली हैं, वे अलग-अलग और समान तरीकों से आपके लिए समान काम करते हैं, मैं उन्हें 3 मुख्य समूहों में विभाजित करता हूं :


1) मॉड्यूल बंडल

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

webpack

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

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

इस दस्तावेज़ को इन अवधारणाओं के एक उच्च-स्तरीय अवलोकन देने का इरादा है, जबकि विस्तृत अवधारणा विशिष्ट उपयोग-मामलों के लिंक प्रदान करते हैं।

अधिक यहाँ

browserify

Browserify एक विकास उपकरण है जो हमें नोड.जेएस-शैली मॉड्यूल लिखने की अनुमति देता है जो ब्राउज़र में उपयोग के लिए संकलन करता है। नोड की तरह, हम अपने मॉड्यूल को अलग-अलग फाइलों में लिखते हैं, मॉड्यूल.एक्सपोर्ट और एक्सपोर्ट चर का उपयोग करके बाहरी तरीकों और गुणों का निर्यात करते हैं। यहां तक ​​कि हमें आवश्यकता फ़ंक्शन का उपयोग करके अन्य मॉड्यूल की आवश्यकता हो सकती है, और यदि हम सापेक्ष पथ को छोड़ देते हैं तो वह नोड_मॉड्यूल निर्देशिका में मॉड्यूल का समाधान करेगा।

अधिक यहाँ


2) टास्क रनर

gulp और ग्रंट टास्क रनर हैं, मूल रूप से वे जो भी करते हैं, कार्यों को बनाते हैं और जब चाहें तब उन्हें चलाते हैं, उदाहरण के लिए आप अपने CSS को छोटा करने के लिए एक प्लगइन स्थापित करते हैं और फिर प्रत्येक बार इसे छोटा करने के लिए चलाते हैं, प्रत्येक के बारे में अधिक विवरण:

घूंट

gulp.js फ्रैक्टल इनोवेशन द्वारा एक ओपन-सोर्स जावास्क्रिप्ट टूलकिट है और गिटहब में ओपन सोर्स समुदाय है, जिसका उपयोग फ्रंट-एंड वेब डेवलपमेंट में स्ट्रीमिंग सिस्टम के रूप में किया जाता है। यह Node.js और Node Package Manager (npm) पर बनाया गया एक टास्क रनर है, जिसका उपयोग वेब डेवलपमेंट में शामिल होने वाले समय-उपभोग और दोहराव कार्यों के स्वचालन के लिए किया जाता है जैसे कि minification, concatenation, cache busting, यूनिट टेस्टिंग, लाइनिंग, ऑप्टिमाइज़ेशन आदि gulp का उपयोग करता है। अपने कार्यों को परिभाषित करने के लिए एक कोड-ओवर-कॉन्फ़िगरेशन दृष्टिकोण और उन्हें बाहर ले जाने के लिए अपने छोटे, एकल-उद्देश्य वाले प्लगइन्स पर निर्भर करता है। gulp इकोसिस्टम में 1000+ ऐसे प्लगइन्स हैं जो चुनने के लिए उपलब्ध हैं।

अधिक यहाँ

असंतोष का शब्द

ग्रंट एक जावास्क्रिप्ट टास्क रनर है, जिसका उपयोग स्वचालित रूप से अक्सर उपयोग किए जाने वाले कार्यों जैसे कि खनन, संकलन, यूनिट टेस्टिंग, लाइनिंग आदि के लिए किया जाता है। यह फाइल में परिभाषित कस्टम कार्यों को चलाने के लिए कमांड-लाइन इंटरफेस का उपयोग करता है (जिसे ग्रंटफाइल के रूप में जाना जाता है) । ग्रंट बेन अल्मन द्वारा बनाया गया था और Node.js. में लिखा गया है यह npm के माध्यम से वितरित किया जाता है। वर्तमान में, ग्रंट पारिस्थितिकी तंत्र में पांच हजार से अधिक प्लगइन्स उपलब्ध हैं।

अधिक यहाँ


3) पैकेज मैनेजर

पैकेज मैनेजर, जो वे करते हैं, वह आपके एप्लिकेशन में आपके लिए आवश्यक प्लग-इन का प्रबंधन करता है और पैकेज के लिए github आदि के माध्यम से आपके लिए उन्हें स्थापित करता है। पैकेज का उपयोग करके, आप को अपडेट करने के लिए बहुत आसान है, उन्हें इंस्टॉल करें और अपने ऐप को साझा करें, प्रत्येक के लिए अधिक विवरण:

NPM

npm जावास्क्रिप्ट प्रोग्रामिंग भाषा के लिए एक पैकेज मैनेजर है। यह जावास्क्रिप्ट रनटाइम वातावरण के लिए डिफ़ॉल्ट पैकेज प्रबंधक है Node.js. इसमें एक कमांड लाइन क्लाइंट होता है, जिसे npm भी कहा जाता है, और सार्वजनिक पैकेजों का एक ऑनलाइन डेटाबेस, जिसे npm रजिस्ट्री कहा जाता है। रजिस्ट्री को क्लाइंट के माध्यम से एक्सेस किया जाता है, और उपलब्ध पैकेजों को ब्राउज करके npm वेबसाइट के माध्यम से खोजा जा सकता है।

अधिक यहाँ

कुंज

Bower उन घटकों को प्रबंधित कर सकता है जिनमें HTML, CSS, जावास्क्रिप्ट, फोंट या यहां तक ​​कि छवि फ़ाइलें हैं। बोवर कोड को संक्षिप्त या छोटा नहीं करता है या कुछ और नहीं करता है - यह सिर्फ उन पैकेजों के सही संस्करणों को स्थापित करता है जिनकी आपको ज़रूरत है और उनकी निर्भरताएं हैं। आरंभ करने के लिए, बोवर को हर जगह से पैकेज प्राप्त करने और स्थापित करने, शिकार की देखभाल करने, खोजने, डाउनलोड करने और उस सामान को बचाने के लिए काम करता है जो आप देख रहे हैं। Bower इन पैकेजों का ट्रैक एक प्रकट फ़ाइल, bower.json में रखता है।

अधिक यहाँ

और सबसे हाल ही में पैकेज प्रबंधक जो याद नहीं किया जाना चाहिए, यह वास्तविक काम के माहौल में युवा और तेज है npm की तुलना में जो मैं ज्यादातर पहले उपयोग कर रहा था, मॉड्यूल को फिर से स्थापित करने के लिए, यह मॉड्यूल के अस्तित्व की जांच करने के लिए नोड_मॉडल फ़ोल्डर की दोहरी जांच करता है, यह भी लगता है कि मॉड्यूल स्थापित करने में कम समय लगता है:

धागा

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

यार्न आपको विभिन्न समस्याओं के लिए अन्य डेवलपर्स समाधानों का उपयोग करने की अनुमति देता है, जिससे आपके लिए अपने सॉफ़्टवेयर को विकसित करना आसान हो जाता है। यदि आपको समस्याएँ हैं, तो आप समस्याओं की रिपोर्ट कर सकते हैं या वापस योगदान दे सकते हैं, और जब समस्या ठीक हो जाती है, तो आप यार्न का उपयोग सभी को अद्यतित रखने के लिए कर सकते हैं।

कोड को पैकेज के रूप में कुछ के माध्यम से साझा किया जाता है (कभी-कभी एक मॉड्यूल के रूप में संदर्भित)। एक पैकेज में सभी कोड के साथ-साथ एक पैकेज साझा किया जाता है। पैकेज की जानकारी देने वाली फ़ाइल।

अधिक यहाँ



क्या गुल प्लग की सूची है? क्या वास्तव में 1000+ हैं? npm केवल 20 या तो लौटाता है?
flurbius

1
महान सारांश। आधुनिक वेब विकास के बारे में किसी भी चर्चा के लिए एक प्रवेश बिंदु होना चाहिए।
एडम बुबेला

1
@flurbius हाँ, यहाँ: gulpjs.com/plugins । वर्तमान में लगता है कि 3,465 Gulp प्लगइन्स हैं।
एमटीएस knn

52

आप npmcompare पर कुछ तकनीकी तुलना पा सकते हैं

तुलना ब्राउज़र बनाम ग्रंट बनाम गल्प बनाम वेबपैक

जैसा कि आप देख सकते हैं कि वेबपैक हर 4 दिनों में औसतन एक नए संस्करण के साथ बहुत अच्छी तरह से बनाए रखा जाता है। लेकिन लगता है कि गुल्प उन सभी का सबसे बड़ा समुदाय है (गितुब पर 20K सितारों के साथ) ग्रंट थोड़ा उपेक्षित (दूसरों की तुलना में) लगता है

इसलिए अगर मुझे एक को चुनने की जरूरत है तो मैं गुल के साथ जाऊंगा


5
अब वेबपैक जीथब पर 26k से शुरू होता है और 25.7k के साथ खुलता है। लोकप्रियता फ़ैक्टर का उपयोग अब और तय करने के लिए नहीं कर सकते ...
Rayee Roded


14

वेबपैक और वेबपैक-देव-सर्वर क्या है? आधिकारिक प्रलेखन कहता है कि यह एक मॉड्यूल बंडलर है, लेकिन मेरे लिए यह सिर्फ एक कार्य धावक है। क्या फर्क पड़ता है?

वेबपैक-देव-सर्वर एक लाइव रीलोडिंग वेब सर्वर है जिसे वेबपैक डेवलपर तत्काल प्रतिक्रिया प्राप्त करने के लिए उपयोग करते हैं कि वे क्या करते हैं। इसका उपयोग केवल विकास के दौरान किया जाना चाहिए।

यह प्रोजेक्ट nof5 यूनिट टेस्ट टूल से काफी प्रेरित है ।

जैसा कि नाम से ही पता चलता है कि वेबपैक वेब के लिए एक सिंगल पैक युग बनाएगा । पैकेज को छोटा किया जाएगा, और एक फाइल में जोड़ा जाएगा (हम अभी भी HTTP 1.1 उम्र में रहते हैं)। Webpack संसाधनों (जावास्क्रिप्ट, सीएसएस, चित्र) के संयोजन और उन्हें इस तरह से इंजेक्ट करने का जादू करता है :।<script src="assets/bundle.js"></script>

इसे मॉड्यूल बंडलर भी कहा जा सकता है क्योंकि इसे मॉड्यूल निर्भरता को समझना चाहिए, और निर्भरता को कैसे पकड़ना है और उन्हें एक साथ बांधना है।

आप ब्राउजर का उपयोग कहां करेंगे? क्या हम नोड / ES6 आयात के साथ भी ऐसा नहीं कर सकते हैं?

आप Browserify का उपयोग ठीक उन्हीं कार्यों पर कर सकते हैं जहां आप Webpack का उपयोग करेंगे । - हालांकि, वेबपैक अधिक कॉम्पैक्ट है।

ध्यान दें कि Webpack2 में ES6 मॉड्यूल लोडर सुविधाएँ System.import का उपयोग कर रही हैं , जो कि एक भी ब्राउज़र मूल रूप से समर्थन नहीं करता है।

आप npm + plugins पर gulp / grunt का उपयोग कब करेंगे?

आप गुल, ग्रंट, ब्रोकोली, ब्रंच और बोवर को भूल सकते हैं । के बजाय सीधे NPM कमांड लाइन स्क्रिप्ट का उपयोग और आप इन यहाँ की तरह अतिरिक्त संकुल को समाप्त कर सकते Gulp :

var gulp        = require('gulp'),
  minifyCSS     = require('gulp-minify-css'),
  sass          = require('gulp-sass'),
  browserify    = require('gulp-browserify'),
  uglify        = require('gulp-uglify'),
  rename        = require('gulp-rename'),
  jshint        = require('gulp-jshint'),
  jshintStyle   = require('jshint-stylish'),
  replace       = require('gulp-replace'),
  notify        = require('gulp-notify'),

जब आप अपने प्रोजेक्ट के लिए कॉन्फिग फाइल बनाते हैं, तो आप संभवतः गुलप और ग्रंट कॉन्फिग फाइल जनरेटर का उपयोग कर सकते हैं । इस तरह आपको येओमान या इसी तरह के औजारों को स्थापित करने की आवश्यकता नहीं है ।


14

यार्न एक हालिया पैकेज मैनेजर है जिसका शायद उल्लेख किया जाना चाहिए।
तो, यहाँ यह है: https://yarnpkg.com/

जहां तक ​​मुझे पता है कि यह एनपीएम और बोवर निर्भरता दोनों प्राप्त कर सकता है और इसमें अन्य सराहनीय विशेषताएं हैं।


12

Webpackएक बंडल है। जैसा Browserfyयह मॉड्यूल अनुरोध (के लिए codebase में लग रहा है requireया import) और उन्हें हल रिकर्सिवली। क्या अधिक है, आप Webpackजावास्क्रिप्ट जैसे मॉड्यूल को हल करने के लिए कॉन्फ़िगर नहीं कर सकते हैं , लेकिन सीएसएस, चित्र, एचटीएमएल, शाब्दिक रूप से सब कुछ। क्या मुझे विशेष रूप से उत्साहित करता है Webpack, आप एक ही ऐप में संकलित और गतिशील रूप से लोड किए गए मॉड्यूल दोनों को जोड़ सकते हैं। इस प्रकार एक वास्तविक प्रदर्शन को बढ़ावा मिलता है, विशेष रूप से HTTP / 1.x पर। आप इसे वास्तव में कैसे करते हैं, मैंने यहां उदाहरणों के साथ वर्णित किया है http://dsheiko.com/weblog/state-of-javascript-modules-2017/ बंडलर के लिए एक विकल्प के रूप में कोई भी सोच सकता है Rollup.js( https://rollupjs.org/ ) , जो संकलन के दौरान कोड का अनुकूलन करता है, लेकिन सभी पाया अप्रयुक्त विखंडू को अलग करता है।

के AMDबजाय, RequireJSएक के बजाय मूल के साथ जा सकते हैं ES2016 module system, लेकिन System.js( https://github.com/systemjs/systemjs ) के साथ लोड किया गया

इसके अलावा, मुझे लगता npmहै कि अक्सर एक स्वचालित उपकरण जैसे gruntया के रूप में प्रयोग किया जाता है gulp। की जाँच करें https://docs.npmjs.com/misc/scripts । मैं व्यक्तिगत रूप से npm स्क्रिप्ट के साथ अब केवल अन्य स्वचालन टूल से बचने के साथ जाता हूं, हालांकि अतीत में मैं बहुत ज्यादा था grunt। अन्य उपकरणों के साथ आपको पैकेजों के लिए अनगिनत प्लगइन्स पर निर्भर रहना पड़ता है, जो अक्सर अच्छे नहीं लिखे जाते हैं और सक्रिय रूप से बनाए नहीं रखे जाते हैं। npmइसके पैकेजों को जानता है, इसलिए आप किसी भी नाम से स्थानीय स्तर पर स्थापित पैकेजों को कॉल करते हैं:

{
  "scripts": {
    "start": "npm http-server"
  },
  "devDependencies": {
    "http-server": "^0.10.0"
  }
}

वास्तव में आप एक नियम के रूप में किसी भी प्लगइन की आवश्यकता नहीं है अगर पैकेज सीएलआई का समर्थन करता है।

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