वेबपैक के लिए लोडर ऑर्डर क्या है?


86

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

मैंने स्रोत को पढ़ने की कोशिश की , लेकिन जब मुझे लगा कि मुझे लगता है कि लोडिंग लागू करता है तो मुझे समझ नहीं आता कि यह कैसे व्यवहार करता है।

प्रलेखन में यह उल्लेख नहीं किया गया है कि उस स्थिति को या तो कैसे व्यवहार करना चाहिए।

जवाबों:


108
{
    test: /\.css$/,
    loaders: ['style'],
},
{
    test: /\.css$/,
    loaders: ['css'],
},

तथा

{
    test: /\.css$/,
    loaders: ['style', 'css'],
},

बराबर होना। फ़ंक्शन के संदर्भ में, यह style(css(file))(धन्यवाद मिगुएल) के समान है।

ध्यान दें कि उनके भीतर loadersका मूल्यांकन दाईं से बाईं ओर किया जाता है


2
हम्म, बहुत उपयोगी व्यवहार मुझे नहीं लगता: - / मैं उस व्यवहार के लिए preLoaders इस्तेमाल करूँगा ...
w00t

19
लोडर कार्यों की तरह कार्य करता है, इसीलिए यह दाएं से बाएं ओर है। जब आप इसका उपयोग करते हैं "style!css", तो उन्हें कार्यों की तरह कल्पना करें: style( css( file ) )... इस मामले cssमें पहले कहा जाता है।
मिगुएल एंजेलो

11
RIGHT से LEFT तक के मूल्यांकन ने मुझे कुछ समय के लिए संघर्ष किया। @ मिगुएल-एंजेलो आपकी style( css( file ) )व्याख्या मेरे लिए राहत की बात है।
इवी सॉन्ग

1
दाएँ से बाएँ सबसे अधिक संभावना अनिवार्य रूप से टॉप को नीचे का मतलब है, जब हम Webpack 3 सिंटेक्स ... सबसे निचले भाग में देख रहे हैं: पहला उर्फ अंतरतम समारोह ...
फ्रैंक Nocke

1
मुझे नहीं पता कि यह कब जोड़ा गया था लेकिन आदेश के बारे में आखिरकार प्रलेखन है: webpack.js.org/concepts/loaders/#loader-features लोडर को जंजीर बनाया जा सकता है। श्रृंखला में प्रत्येक लोडर संसाधित संसाधन में परिवर्तन लागू करता है। एक चेन को रिवर्स ऑर्डर में निष्पादित किया जाता है। पहला लोडर अपने परिणाम (लागू परिवर्तनों के साथ संसाधन) को अगले एक, और इसके बाद से गुजरता है। अंत में, वेबपैक को उम्मीद है कि श्रृंखला में अंतिम लोडर द्वारा जावास्क्रिप्ट लौटाया जाएगा।
एरिक माजेरस

61

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

1।

सुनिश्चित करें कि वे सही क्रम में हैं (ऊपर से नीचे)।

2।

वे कार्य हैं जो एक संसाधन फ़ाइल के स्रोत को पैरामीटर के रूप में लेते हैं और नए स्रोत को वापस करते हैं।

3।

लोडर जंजीर हो सकते हैं। वे संसाधन के लिए एक पाइपलाइन में लागू होते हैं। अंतिम लोडर से जावास्क्रिप्ट लौटने की उम्मीद है; प्रत्येक अन्य लोडर मनमाना प्रारूप में स्रोत लौटा सकता है, जो अगले लोडर को दिया जाता है।

इसलिए...

यदि आपके पास somefile.cssऔर आप के माध्यम से गुजर रहे हैं loaderOne, loaderTwo, loaderThreeएक नियमित रूप से श्रृंखलित समारोह की तरह बर्ताव करती है।

{
    test: /\.css$/,
    loaders: ['loaderOne', 'loaderTwo', 'loaderThree']
}

इसका मतलब बिल्कुल वैसा ही है ...

loaderOne(loaderTwo(loaderThree(somefile.css)))

अगर आप ग्रंट से आ रहे हैं || यह दुनिया को भ्रमित कर रहा है। बस दाएं से बाएं से लोडर ऑर्डर पढ़ें।


1
मेरे पास यह माड्यूल.लोडर्स है, वे किस क्रम में निष्पादित करते हैं?
सरस आर्य

44
क्यों वे सबसे ऊपर है?
light24bulbs

आप यह निर्दिष्ट करने के लिए उत्तर को संशोधित कर सकते हैं कि प्रलेखन में "अंतिम लोडर" loaderOneआपके उदाहरण में है
आआआआआआआआआआआ

1
@ light24bulbs ताकि आप .pushनियमों के लिए एक सरल के साथ अतिरिक्त लोडर जोड़ सकें और उन्हें पहले से तैयार करने के बारे में चिंता न करें।
सरके

2

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

मान लें कि आपके पास एक url-loaderउच्च प्राथमिकता के साथ आपके कॉन्फ़िगरेशन में है file-loaderऔर आप बाद वाले के साथ एक छवि पथ आयात करना चाहते हैं । कुछ नहीं करने से फ़ाइल आयात होती है url-loader(जो एन्कोडेड डेटा-url बनाता है)।

आयात को उपसर्ग के साथ file-loader!आयात करना उस लोडर को निर्देशित करेगा।

import image from 'file-loader!./my-img.png'

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