2016-02-12 11 views
22

Ich mache ein React w/Webpack-Setup und bin schwer zu tun, was scheint, sollte eine einfache Aufgabe sein. Ich möchte, dass Webpack Bilder enthält, und minimiere sie wie ich mit Schluck, aber ich kann es nicht herausfinden. Ich möchte nur in der Lage, ein Bild in meinem css zu verknüpfen wie folgt:Wie man Bilder in css mit Webpack verwendet

/* ./src/img/background.jpg */ 

body { background: url('./img/background.jpg'); } 

Ich habe alle meine css/js/img Ordner in einem Ordner src. Webpack gibt die Daten in einen Ordner "dist" aus, aber ich kann nicht herausfinden, wie ich Bilder dorthin bringen kann.

Hier ist meine webpack Setup:

var path = require('path'); 
var webpack = require('webpack'); 
var HtmlWebpackPlugin = require('html-webpack-plugin'); 

module.exports = { 
    devtool: 'cheap-eval-source-map', 
    entry: [ 
    'webpack-dev-server/client?http://localhost:8080', 
    'webpack/hot/dev-server', 
    './src/index.js' 
    ], 
    output: { 
    path: path.join(__dirname, 'dist'), 
    // publicPath: './dist', 
    filename: 'bundle.js' 
    }, 
    plugins: [ 
    new webpack.HotModuleReplacementPlugin(), 
    new HtmlWebpackPlugin({ 
    template: './src/index.html' 
    }) 
    ], 
    module: { 
    loaders: [{ 
    exclude: /node_modules/, 
    test: /\.js?$/, 
    loader: 'babel' 
    }, { 
    test: /\.scss$/, 
    loader: 'style!css!sass' 
    }, { 
    test: /\.(png|jpg)$/, 
    loader: 'file-loader' 
    }] 
}, 

devServer: { 
    historyApiFallback: true, 
    contentBase: './dist', 
    hot: true 
    } 
}; 

Antwort

29

Ich war mit ähnlichem Problem stecken und festgestellt, dass Sie url-loader können "url()" Aussagen in Ihrem CSS als andere benötigen oder Import-Anweisungen zu lösen.

es zu installieren:

npm install url-loader --save-dev

Es wird den Loader installieren, die aufgelöste Pfade als BASE64 Strings umwandeln können.

In Ihrer webpack Konfigurationsdatei Verwendung url-loader in Lader

{ 
    test: /\.(png|jpg)$/, 
    loader: 'url-loader' 
} 

auch sicher, dass Sie Ihren öffentlichen Pfad angeben richtig und den Pfad der Bilder, die Sie laden wollen.

+0

@ user3737841 löst es Ihr Problem? – WitVault

+0

Nun, mein Webpack-Dev-Server dient von/dist und meine Bilder sind in/src. Wissen Sie also, wie ich auf die Bilder in meiner .css-Datei verweisen würde? Sollen die Bilder mit meinem Bundle.js zusammengerollt werden? Ich bin nur nicht sicher, wie man sie zu/dist bringt, da der/dist-Ordner nur ein virtueller ist, der von webpack-dev-server geliefert wird – user3737841

+2

@ user3737841 Sie sollten die Bilder in Ihren Stylesheets "benötigen" können. Zum Beispiel 'background-image: url ('../assets/img/logo-dark.png')'. Sie müssen nur versuchen/anpassen, um den Pfad korrekt zu bekommen. –