वेबपैक लोडर बनाम प्लगइन्स; क्या फर्क पड़ता है?


103

वेबपैक में लोडर और प्लगइन्स के बीच अंतर क्या है?

प्लग-इन के लिए दस्तावेज़ बस का कहना है:

आमतौर पर वेबपैक में बंडलों से संबंधित कार्यक्षमता जोड़ने के लिए प्लगइन्स का उपयोग करें।

मुझे पता है कि babel jsx / es2015 ट्रांसफ़ॉर्म के लिए एक लोडर का उपयोग करता है, लेकिन यह अन्य सामान्य कार्यों (कॉपी-वेबपैक-प्लगइन, उदाहरण के लिए) के बजाय प्लगइन्स का उपयोग करता है।


2
लोडर जेएस पहचानने के लिए फ़ाइलों को बदल देगा (और परिवर्तन के दौरान कुछ काम करें), प्लगइन्स वही कर सकते हैं जो उन्हें कभी लोडर आउटपुट पर चाहिए।
डेविड गुआन

जवाबों:


61

जब आप require("my-loader!./my-awesome-module")अपने कोड में sth का उपयोग करते हैं तो लोडर वस्तुतः किसी भी फ़ाइल प्रारूप का पूर्व-प्रसंस्करण परिवर्तन करते हैं । प्लगइन्स की तुलना में, वे काफी सरल हैं क्योंकि वे (ए) वेबपैक में केवल एक ही फ़ंक्शन को उजागर करते हैं और (बी) वास्तविक बिल्ड प्रक्रिया को प्रभावित करने में सक्षम नहीं हैं।

दूसरी ओर प्लगइन्स वेबपैक में गहराई से एकीकृत हो सकते हैं क्योंकि वे वेबपैक बिल्ड सिस्टम के भीतर हुक रजिस्टर कर सकते हैं और संकलक (और संशोधित) कर सकते हैं, और यह कैसे काम करता है, साथ ही साथ संकलन भी। इसलिए, वे अधिक शक्तिशाली हैं, लेकिन बनाए रखने के लिए भी कठिन हैं।


क्यों लोडर गहराई से वेबपैक के साथ एकीकृत नहीं हो सकता है?
नितिन

@NitinTyagi क्योंकि प्लगइन्स का काम है। लोडर का उद्देश्य सरल होना है।
हेल

151

पूरक और सरल उत्तर जोड़ना।

लोडर:

लोडर व्यक्तिगत फ़ाइल स्तर पर काम के दौरान या पहले बंडल उत्पन्न होता है।

प्लग-इन:

प्लग बंडल या चंक स्तर पर काम करते हैं और आमतौर पर बंडल पीढ़ी प्रक्रिया के अंत में काम करते हैं। प्लगइन्स भी संशोधित कर सकते हैं कि बंडल खुद कैसे बनाए जाते हैं। लोडर की तुलना में प्लगइन्स का अधिक शक्तिशाली नियंत्रण है।

सिर्फ एक उदाहरण के लिए आप नीचे दी गई छवि में स्पष्ट रूप से देख सकते हैं कि लोडर कहां काम कर रहे हैं और कहां प्लगइन्स काम कर रहे हैं -

यहां छवि विवरण दर्ज करें संदर्भ: लेख और छवि


34
बहुत बढ़िया! दो सरल वाक्य और मैं अब अंतर को समझता हूं। कृपया अब ENTIRE वेब पैक डॉक्स लाइब्रेरी को फिर से लिखने के लिए आगे बढ़ें क्योंकि यह पूरी तरह से समझ से बाहर है।
चश्मे

15

इसके मूल में, वेबपैक केवल एक फ़ाइल बंडल है। एक बहुत ही सरल परिदृश्य (कोड विभाजन नहीं) को ध्यान में रखते हुए, इसका मतलब सिर्फ निम्नलिखित क्रियाओं (उच्च स्तर पर) हो सकता है:

  1. प्रविष्टि फ़ाइल ढूंढें और इसकी सामग्री को मेमोरी में लोड करें
  2. सामग्री के भीतर कुछ पाठ का मिलान करें और उन लोगों का मूल्यांकन करें (उदाहरण के लिए @import)
  3. पिछले मूल्यांकन के आधार पर निर्भरता पाते हैं और उनके साथ भी ऐसा ही करते हैं
  4. स्मृति में एक बंडल में उन सभी को सिलाई
  5. फाइल सिस्टम के लिए परिणाम लिखें

जब आप उपरोक्त चरणों की बारीकी से जांच करते हैं, तो यह एक जावा संकलक (या कोई संकलक) के साथ प्रतिध्वनित होता है। पाठ्यक्रम के अंतर हैं, लेकिन लोडर और प्लगइन्स को समझने में कोई फर्क नहीं पड़ता।


लोडर:

यहाँ हैं क्योंकि वेबपैक किसी भी फ़ाइल प्रकार को एक साथ बंडल करने का वादा करता है।

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

इन बाहरी कोड को लोडर कहा जाता है और वे आमतौर पर चरण 1 और 3 के ऊपर चलते हैं। इस प्रकार, चूंकि जिस चरण पर इन लोडरों को चलाने की आवश्यकता होती है वह स्पष्ट है, उन्हें हुक की आवश्यकता नहीं होती है और न ही वे निर्माण प्रक्रिया को प्रभावित करते हैं (क्योंकि निर्माण या बंडल केवल चरण 4 पर होता है)।

इसलिए लोडर संकलन के लिए मंच तैयार करते हैं और वे वेबपैक कंपाइलर के लचीलेपन का विस्तार करते हैं।


प्लग-इन:

यहाँ हैं क्योंकि भले ही वेबपैक सीधे चर उत्पादन का वादा नहीं करता है, दुनिया इसे चाहती है और वेबपैक इसकी अनुमति देता है।

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

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

ऊपर दिए गए देशी प्लगिन को देखकर ऐसा प्रतीत होता है जैसे कि वेबपैक बंडलिंग या संकलन को कोर बंडलिंग प्रक्रिया में तोड़ा जा सकता है, साथ ही बहुत सारे देशी प्लगइन प्रक्रियाएँ जिन्हें हम बंद या अनुकूलित या विस्तारित कर सकते हैं। इसका मतलब बाहरी कोड को विशिष्ट बिंदुओं पर बंडलिंग प्रक्रिया में शामिल होने की अनुमति देना है जिसे वे (हुक कहा जाता है) से चुन सकते हैं।

इसलिए प्लगइन्स वेबपैक कंपाइलर की क्षमता को बढ़ाने के लिए आउटपुट और सॉर्ट को प्रभावित करते हैं।


1
महान जवाब है, वास्तव में एक ज्वलंत चित्रण करते
Robotron

मुझे वास्तव में यह उत्तर पसंद है। यह आपको तर्क करने में सक्षम होने के लिए कुछ स्पष्टीकरण देता है। न सिर्फ परिभाषा बल्कि इसके पीछे की अंतर्दृष्टि।
५० बजे दाजाग

1

लोडर एक फ़ाइल स्तर पर काम करते हैं । वे टेम्पलेट लिख सकते हैं, अपनी सुविधा के आधार पर इसे ट्रांसपाइल करने के लिए कुछ कोड प्रोसेस कर सकते हैं, आदि।

प्लगइन्स एक सिस्टम स्तर पर काम करते हैं । वे पैटर्न, फ़ाइल सिस्टम हैंडलिंग (नाम, पथ), आदि पर काम कर सकते हैं।

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