2015-07-09 10 views
9

मैं शैली पत्रक के लिए एक काफी जटिल लोडर सेटअप:वेबपैक लोडर उपनाम?

{ 
    test: /\.scss$/, 
    loader: ExtractTextPlugin.extract("style", 
     "css?sourceMap&localIdentName=[path][name]__[local]__[hash:base64:5]!sass?outputStyle=expanded&" + 
     "includePaths[]=" + other stuff) 
    ) 
    } 

कौन सा अच्छा काम करता है, लेकिन कुछ पर की आवश्यकता है मैं सीएसएस-लोडर को modules विकल्प जोड़ना चाहते हैं, तो यह इस तरह दिखना चाहते हैं:

require('./foo.scss!css?modules&sourceMap&localIdentName=[path][name]__[local]__[hash...'); 

लेकिन मैं इसे पूरी जगह पर नहीं कर सकता।

मैं इसे कैसे कॉन्फ़िगर कर सकता हूं ताकि मैं निश्चित रूप से सीएसएस-लोडर मॉड्यूल ध्वज को सक्षम कर सकूं जबकि बाकी के बाकी हिस्सों को वही रखा जा सके?

शायद लोडर 'उपनाम' जैसे कुछ, उदा। require('./foo.scss!my-scss-with-modules-flag-alias')?

एकमात्र समाधान जो मैं सोच सकता हूं वह एक लोडर लिख रहा है जो सिंटैक्स को कुछ आवश्यकता कॉलों में लोडर कॉन्फ़िगरेशन में इनलाइन करने के लिए परिवर्तित करता है ... लेकिन यह भंगुर और जटिल है।

+0

कैसे आप इन मामलों के अलावा बता सकते हैं? क्या एक संकल्प लोडर उपनाम आपके लिए काम करेगा? उस स्थिति में आप प्रत्येक विशेष मामले के लिए 'आवश्यकता (' मॉड्यूल के साथ।/Foo.scss ') कुछ ऐसा करेंगे। –

+0

ऐसा लगता है कि काम करता है, धन्यवाद! – FakeRainBrigand

+0

ठीक है, मैं इसे एक उत्तर के रूप में ले जाऊंगा। –

उत्तर

15

resolLoader.alias यहां काम करेगा। अर्थात।

resolveLoader: { 
    alias: { 
     'with-modules': 'loader definition goes here', 
    } 
} 

इस विन्यास का उपयोग करते हुए आप अपने कोड में बस

require('with-modules!./foo.scss'); 

कर सकते हैं।

+2

आप इस समाधान को कैसे प्राप्त किया? वेबपैक अद्भुत है, बग मुझे दस्तावेज़ीकरण के साथ कठिन समय है ... –

+1

ठीक है, मैं वेबपैक से संबंधित किताबों को संलेखित कर रहा हूं, इसलिए यह इन चीजों को जानने के लिए मेरा काम है। मैंने इस बारे में दस्तावेज में एक नोट जोड़ा क्योंकि यह पहले गायब था। मैं सहमत हूं कि दस्तावेज़ीकरण थोड़ा अपारदर्शी हो सकता है। –

+1

@ जुहोव्सस्लाइन: क्या आप अपने उत्तर पर विस्तार कर सकते हैं। परिभाषा में क्या होगा? यदि मैं "शैली! सीएसएस? मॉड्यूल! पोस्टसीएसएस" के साथ उपनाम बनाने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है: मॉड्यूल की शैली को हल नहीं कर सकता! सीएसएस '। –

1

संकल्पलोडर .alias दिए गए मामले में काम कर सकता है, क्योंकि आप लोडर के रूप में प्लगइन का उपयोग कर रहे हैं। हालांकि यदि आपको लोडर की एक श्रृंखला का उपयोग करने की आवश्यकता है, तो यह काम नहीं करेगा। (इसमें एक फीचर अनुरोध है: https://github.com/webpack/webpack/issues/2772)।

इसके बजाय आप बयान

var styles = require('./foo.scss?modules'); 

की आवश्यकता होती है में फाइल करने के लिए एक पैरामीटर जोड़ सकते हैं और एक नया लोडर नियम बना सकते हैं:

module: { 
    loaders: [ 
     ... 
     { test: /\.scss$/, loader: 'style!css!postcss!sass' }, 
     { test: /\.scss\?modules$/, loader: 'style!css?modules!postcss!sass' } 
    ] 
} 
+0

वेबपैक 3 का उपयोग करके इसे काम करने के लिए नहीं मिला। यह हमेशा पहले लोडर का चयन करता है जैसे कि यह क्वेरी पैराम को अनदेखा कर रहा था। – Ryall

संबंधित मुद्दे