我正在使用带有babel-loader的webpack来转换.jsx反应文件 . 但是,添加文件加载器或样式和css-loader无法正确处理react组件或样式表中的required()图像 .
它们被webpack识别并复制到dist文件夹 . 图像文件的路径是正确的,我在css和js输出中验证了这一点 . 服务器也能够显示文件,我已经检查了一些手动复制的文件 .
发生的事情是图像本身被破坏了 . 没有图像查看器和浏览器可以显示导致浏览器中不可见图像的图像 .
到目前为止我尝试过的:
-
仅使用babel-loader,如:https://github.com/webpack/file-loader/issues/35中所述,导致错误:文件类型没有处理程序 .
-
直接使用file-loader
-
使用image-webpack-loader(似乎是在引擎盖下使用文件加载器)
-
使用IsomorphicLoaderPlugin(https://github.com/jchip/isomorphic-loader),它似乎是webpack-isomorphic-tools的一个更简单的替代品
-
使用带有url()和ExtractTextPlugin('style-loader", ' css-loader')的css background-images
上述所有步骤都导致webpack错误,找不到合适的处理程序或损坏的图像文件 .
这是我当前的webpack配置供参考(我已经包含了所有这些,以防有任何问题/冲突我忽略):
var ExtractTextPlugin = require('extract-text-webpack-plugin'),
webpack = require('webpack');
IsomorphicLoaderPlugin = require("isomorphic-loader/lib/webpack-plugin");
module.exports = {
context: __dirname + '/client',
entry: ['babel-polyfill', './index.jsx'],
output: {
filename: 'app.js',
path: __dirname + '/dist',
publicPath: '/'
},
resolve: {
ignore: /node_modules/,
extensions: ['', '.js', '.jsx']
},
devtool: 'source-map',
plugins: [
new ExtractTextPlugin('styles.css'),
new IsomorphicLoaderPlugin({ keepExistingConfig: false }),
new webpack.DefinePlugin({
"process.env": {
BROWSER: JSON.stringify(true)
}
})
],
module: {
preLoaders: [
{
loaders: ['isomorphine']
}
],
loaders: [
{
test: /\.jsx?$/,
loader: 'babel',
exclude: /node_modules/,
query: {
cacheDirectory: true,
plugins: ['transform-runtime', 'transform-decorators-legacy', 'transform-class-properties', 'transform-object-rest-spread'],
presets: ['react', 'es2015', 'stage-0']
}
},
{
test: /\.css$/,
loader: ExtractTextPlugin.extract('style-loader', 'css-loader')
},
{
test: /\.(jpe?g|png|gif|svg)$/i,
loader: "file!isomorphic"
}
]
}
};