Webpack打包生成多余图片的解决方案和Webpack5正确打包图片姿势

本文探讨了在Webpack 5中如何避免url-loader的重复打包问题,升级css-loader后,如何正确配置HTML-loader以处理背景图片,并介绍了使用asset-modules的便捷打包方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习webpack打包图片资源(background-image)时出现了一些问题

一般来说使用webpack进行对图片的打包处理需要下载两个依赖,file-loaderurl-loader

url-loader是依赖于file-loader的基础上的扩展,其可以将设置的limit大小的图片转化为base64格式,这样可以减少http的请求次数,减轻服务器的压力。

但是在我使用url-loader进行打包时却发现我的每张图片资源都打包了两次,而且有一张不能显示,打开不显示的图片二进制后内容是:export default __webpack_public_path__ ...(图片名称)

 而且打包后的index.html里面引入的图片地址正是这张打不开的图片路径。

这是我的webpack版本

在搜集众多资料之后发现罪魁祸首居然是css-loader这个鬼东西,在某一次的版本更新中,css-loader推出了打包图片的新功能

在这里插入图片描述

这是我的css-loader版本

 所以我们在对背景图片的引入打包处理时可以不再需要使用url-loader

同样的对于页面上的图片的引入我们之前的方法是使用html-loader并且要将url-loaderesModule设置为false,因为我们的html-loader引入图片使用的是commonjs,而url-loader默认使用es6模块化解析,如果不设置为false打包后的图片路径会出现 [object Module]

但是现在因为css-loader的更新,我们可以直接使用html-loader去对图片的引入进行一个打包而不需要进行其他的操作处理。


更新一下

因为在后面的研究中想对打包后的图片进行重命名,可是css-loader并不支持呀!怎么办呢,也意识到上面的处理方法并不是一个完美的方案,于是又经过一下午的摸索找到了完美的解决方案,依旧是使用我们的url-loader

先上代码

 可以看到红色框框里面添加的type属性,这里很关键!

 同时使用url-loadercss-loader的时候就会出现一开始碰到的问题,在取消了css-loaderurl属性后又会发现我们的图片路径引入错误。所以我猜测可能是两个模块之间的功能发生冲突了,所以加上我们最重要的属性type后发现我们已经完美打包了~图片资源也不会出现重复打包的现象。


更新一下

在后续学习webpack打包过程中突然发现我使用的是webpack5!然后回过头来看图片资源的打包,发现了上面只是对webpack5使用之前版本的打包方式的冲突解决。

而在我们的webpack5版本中已经可以不需要使用url-loaderfile-loader了(字体图标的打包也是)

直接使用我们webpack5的asset-module,直接放上代码

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值