webpack打包出现图片不显示怎样办?一些朋友有遇到webpack打包后,图片路径不错不显示图片的情况,那么这时我们该怎样解决呢?
在vue组件的style标签内部有如下一段使用背景图片的css代码
background-image: url("../assets/img/icon_add.png");
在webpack中css-loader的解析配置如下
{
test: /\.(css|less)$/,
exclude: path.resolve(__dirname, 'node_modules'),
use: ['style-loader', 'css-loader', 'less-loader']
}
打包后在dist目录的发现没有css文件。这是因为css文件被转化成了js文件。
此时启动项目,背景图片引入正确,能够正常显示。
将css文件提取到单独的文件目录
使用 mini-css-extract-plugin 将css文件单独提取到dist目录下的css目录下。
loader配置
{
test: /\.(css|less)$/,
exclude: path.resolve(__dirname, 'node_modules'),
use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
}
plugin配置
new MiniCssExtractPlugin({
filename: 'css/[name][contenthash].css',
})
可以看到此时图片在根目录(dist)目录下,但是css文件处在dist/css/目录下。现在来看一下打包后的css文件是如何引用图片的路径。
打包结果
background-image: url(bb65a86a2fe7669e483a56b970bea421.png);
可以看到在dist/css目录下没有bb65a86a2fe7669e483a56b970bea421.png图片。因此图片无法正常显示。理想的情况是
background-image: url(../bb65a86a2fe7669e483a56b970bea421.png);
解决方案
更改loader的配置如下
{
loader: MiniCssExtractPlugin.loader,
options: {
// 当前的css所在的文件相对于打包后的根路径dist的相对路径
publicPath: '../'
}
}, 'css-loader', 'less-loader'
分离css文件导致css背景图片路径错误,解决方案的核心是配置publicPath的值,publicPath的值是css文件所在的文件目录相对于根目录的相对路径值。 比如,根路径是/,css文件所在的目录是/css/,因此相对路径是..
以上就是webpack打包图片不显示的解决方法介绍,有需要的朋友可以参考了解看看,希望对大家解决问题有帮助。