网页制作 
首页 > 网页制作 > 浏览文章

完美解决webpack打包css背景图片路径问题

(编辑:jimmy 日期: 2024/11/28 浏览:3 次 )

在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文件。

完美解决webpack打包css背景图片路径问题 

此时启动项目,背景图片引入正确,能够正常显示。

2 将css文件提取到单独的文件目录

使用 mini-css-extract-plugin 将css文件单独提取到dist目录下的css目录下。

2.1 loader配置

{
        test: /\.(css|less)$/,
        exclude: path.resolve(__dirname, 'node_modules'),
        use: [MiniCssExtractPlugin.loader, 'css-loader', 'less-loader']
    }

2.2 plugin配置

new MiniCssExtractPlugin({
            filename: 'css/[name][contenthash].css',
        })

打包后,dist目录结构如下

完美解决webpack打包css背景图片路径问题

可以看到此时图片在根目录(dist)目录下,但是css文件处在dist/css/目录下。现在来看一下打包后的css文件是如何引用图片的路径。

2.3 打包结果

background-image: url(bb65a86a2fe7669e483a56b970bea421.png);

可以看到在dist/css目录下没有bb65a86a2fe7669e483a56b970bea421.png图片。因此图片无法正常显示。理想的情况是

background-image: url(../bb65a86a2fe7669e483a56b970bea421.png);

3 解决方案

更改loader的配置如下

{
        loader: MiniCssExtractPlugin.loader,
        options: {
            // 当前的css所在的文件相对于打包后的根路径dist的相对路径
            publicPath: '../'
        }
    }, 'css-loader', 'less-loader'

总结

分离css文件导致css背景图片路径错误,解决方案的核心是配置publicPath的值,publicPath的值是css文件所在的文件目录相对于根目录的相对路径值。 比如,根路径是/,css文件所在的目录是/css/,因此相对路径是..

意外问题

为什么webpack打包后,css文件被混入到bundle.js文件中,但是图片没有被混入到bundle.js中???

上一篇:CSS变量对JS交互组件开发带来的提升与变革示例代码详解
下一篇:纯CSS实现选中商品后右下角显示√号功能
一句话新闻
高通与谷歌联手!首款骁龙PC优化Chrome浏览器发布
高通和谷歌日前宣布,推出首次面向搭载骁龙的Windows PC的优化版Chrome浏览器。
在对骁龙X Elite参考设计的初步测试中,全新的Chrome浏览器在Speedometer 2.1基准测试中实现了显著的性能提升。
预计在2024年年中之前,搭载骁龙X Elite计算平台的PC将面世。该浏览器的提前问世,有助于骁龙PC问世就获得满血表现。
谷歌高级副总裁Hiroshi Lockheimer表示,此次与高通的合作将有助于确保Chrome用户在当前ARM兼容的PC上获得最佳的浏览体验。
友情链接:杰晶网络 DDR爱好者之家 南强小屋 黑松山资源网 白云城资源网 网站地图 SiteMap