2016-02-10 13 views
8

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

एक अलग स्टाइल शीट का उपयोग करके मैं एक घटक की पृष्ठभूमि-छवि सेट कर रहा हूं और उस शैली-पत्र को index.js में लोड किया गया है। स्टाइल शीट में सभी शैलियों को पृष्ठभूमि छवि को छोड़कर उस घटक पर लागू हो जाता है।

यहाँ मेरी नमूना शैली पत्र

$bg-img: url('/img/bg.jpg'); 

.show { 
    position: relative; 
    background: $black $bg-img center center; 
    width: 100%; 
    height: 100%; 
    background-size: cover; 
    overflow: hidden; 
} 

एक तरीका यह है कि समस्या को स्पष्ट रूप से छवि की आवश्यकता की जाएगी हल और फिर घटकों प्रतिक्रिया के लिए इनलाइन शैली बनाने के लिए है।

img1 = document.createElement("img"); 
img1.src = require("./image.png"); 

लेकिन मैं अपने छवि फ़ोल्डर जैसे ही मेरी शैली पत्र भार से प्रत्येक छवि अलग से की आवश्यकता द्वारा नहीं लोड सभी छवियों करना चाहते हैं।

मेरे webpack कॉन्फ़िग फ़ाइल

module.exports = { 
    devtool: 'source-map', 
    entry: { 
    main: [ 
     'webpack-dev-server/client?http://localhost:8080', 
     'webpack/hot/only-dev-server', 
     './src/index.js' 
    ] 
    }, 
    output: { 
    path: path.join(__dirname, 'public'), 
    publicPath: '/public/', 
    filename: 'bundle.js' 
    }, 
    plugins: [ 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NoErrorsPlugin() 
    ], 
    module: { 
    loaders: [ 
     { 
     test: /\.jsx?$/, 
     include: path.join(__dirname, 'src'), 
     loader: 'react-hot!babel' 
     }, 
     { 
     test: /\.scss$/, 
     include: path.join(__dirname, 'sass'), 
     loaders: ["style", "css?sourceMap", "sass?sourceMap"] 
     }, 
     { 
     test: /\.(png|jpg)$/, 
     include: path.join(__dirname, 'img'), 
     loader: 'url-loader?limit=10000' 
    } // inline base64 URLs for <=10k images, direct URLs for the rest 
    ] 
    }, 
    resolve: { 
    extensions: ['', '.js', '.jsx'] 
    }, 
    devServer: { 
    historyApiFallback: true, 
    contentBase: './' 
    } 
}; 

मैं कुछ तुच्छ अंक गायब हो सकता है है। किसी भी मदद की सराहना की है।

उत्तर

13

आह .... मैं अंत में इस मुद्दे को पाया है डिबगिंग की एक लंबी घंटे के बाद। यह मेरी मूर्खता थी जिसके कारण मैंने संघर्ष किया था। मैं इस सवाल को हटाना चाहता था, लेकिन सोचा कि यह मेरे जैसे नए कॉमर्स की मदद करेगा जब इसी तरह के मुद्दों पर अटक जाएंगे।

समस्या यहाँ

loader: 'url-loader?limit=10000'

था मैं वास्तव में जानते हुए भी कि वह क्या करता बिना 10kb के आकार दायर करने के लिए सीमा निर्धारित की गई थी। और जिस छवि को मैं लोड कर रहा था वह आकार 21kb था! यह तब होता है जब आप किसी और वेबपैक कॉन्फ़िगरेशन फ़ाइलों की प्रतिलिपि बनाते हैं :) जावास्क्रिप्ट थकान का संकेत!

+0

आह आप सीएसएस में एम्बेडेड छवियों को चाहते थे। मुझे ख़ुशी है कि तुमने उसे ढूँढ लिया। – Brandon

+3

एक पुत्र ... इस पोस्ट को हटाने के लिए धन्यवाद। और मैं तुम्हारे साथ हूं, यह दस्तावेज़ों के लिखित तरीके से पूरी तरह से अपारदर्शी है, मैंने माना कि सबकुछ नीचे 10kb dataurl एन्कोड किया जाएगा और बाकी सब कुछ गुज़र जाएगा ... – motleydev

4

अपने सीएसएस और संपत्तियों को एक्सेस करने के लिए वेबपैक का उपयोग करते समय, आपके सीएसएस को आपके जावास्क्रिप्ट import या require कॉल में उपयोग किए जाने वाले समान मॉड्यूल नामकरण नियमों का पालन करने की आवश्यकता होती है।

img फ़ोल्डर मान लिया जाये कि अपने स्रोत पेड़ की जड़ में है, तो आप एससीएसएस में इस तरह का संदर्भ लेना चाहिए:

// note there is no leading /, which tells "require()" to start from the root of your source tree 
$bg-img: url('img/bg.jpg'); 

या बस पूरी तरह से रिश्तेदार जाना। आप अपने स्रोत कोड मान लिया जाये कि इस तरह है:

/src/styles.scss 
/img/bg.jpg 

आपका styles.scss एक रिश्तेदार पथ इस्तेमाल कर सकते हैं:

// note the path is relative to where the style.scss is in your source tree. 
$bg-img: url('../img/bg.jpg'); 
+0

मैंने दोनों तरीकों से प्रयास किया। अभी भी एक ही समस्या है। क्या वेब-पैक में यूआरएल लोडर के साथ कोई समस्या है? – WitVault

0

मुझे इसी तरह की समस्या थी लेकिन '.jpeg' एक्सटेंशन वाली छवियों के साथ। '.jpg' में एक्सटेंशन को बदलने से मुझे किसी कारण से मदद मिली।

+0

यह सवाल का उत्तर नहीं देता है। एक बार आपके पास पर्याप्त [प्रतिष्ठा] (https://stackoverflow.com/help/whats-reputation) हो जाने पर आप [किसी भी पोस्ट पर टिप्पणी कर सकेंगे] (https://stackoverflow.com/help/privileges/comment); इसके बजाय, [उन उत्तरों को प्रदान करें जिन्हें पूछताछ से स्पष्टीकरण की आवश्यकता नहीं है] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-कर-बजाय)। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/17059336) –

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