webpack4系列教程,如何压缩图片文件?
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔在这里案例一下,图片压缩的事情。当然,网页图片压缩这件事情,也不是非要弄到webpack
里面进行操作。自己使用自己喜欢的工具,进行操作都是可以的。比如:苏南大叔觉得很不错的pngquant
小工具,就是很好用的,链接见文末。
本文的涉及到的loader
是image-webpack-loader
,因为涉及到各种loader
冲突问题,本方案也不是特别完美。大家看着操作吧。测试环境:win10
,nodejs@12.19.0
,webpack@4.41.12
,image-webpack-loader@7.0.1
,url-loader@4.1.0
。
背景叙述
这里先说一下使用webpack
处理图片时,苏南大叔的已有结论。
结论是:css
中的图片使用url-loader
处理,然后html
中的图片,结合HtmlWebpackPlugin
使用require
语句处理(同样需要url-loader
之类的去处理图片地址)。例子如下:
<img src="<%= require('../src/bg2.png')%>">
{
test:/\.(png|jpg|gif|jpeg|svg)$/,
use:[
{
loader: "url-loader",
options: {
name: "[name].[hash:5].[ext]",
limit: 1024, // size <= 1kib
outputPath: "img",
publicPath: "../img/"
}
}
]
},
image-webpack-loader
本文的主要任务是:对图片进行压缩处理,主角是image-webpack-loader
,官方地址如下:
image-webpack-loader
集成了如下几个图片处理工具:gifsicle
,mozjpeg
,optipng
,pngquant
,svgo
,webp
。当然,在安装的时候,部分操作系统下,可能需要单独安装对应的小工具。具体可以查看官方文档。
安装命令是:
npm i image-webpack-loader -D
这里有个小小插曲,就是不使用npm
,而使用cnpm
。一直安装image-webpack-loader
失败的,请试试cnpm
。
配置项目
image-webpack-loader
和url-loader
联动的基本配置项内容,如下所示:
{
test: /\.(png|jpg|gif|jpeg|svg)$/,
use: [{
loader: "url-loader",
options: {
name: "[name].[hash:5].[ext]",
limit: 3*1024, // size <= 1kib
outputPath: "img",
esModule: false
}
}, {
loader: 'image-webpack-loader',
options: {
mozjpeg: {
progressive: true,
},
// optipng.enabled: false will disable optipng
optipng: {
enabled: false,
},
pngquant: {
quality: [0.65, 0.90],
speed: 4
},
gifsicle: {
interlaced: false,
},
// the webp option will enable WEBP
webp: {
quality: 75
}
}
}]
},
url-loader
对于大于limit
设定的图片,采用file-loader
进行处理,而小于等于limit
设定的图片,采用base64
处理。- 本文实验中配合
image-webpack-loader
的是url-loader
,而不是推荐的file-loader
。目前来看,没有任何的冲突问题。 - 配置文件中,对于图片文件的处理,使用了两个
loader
,请注意其配置的先后顺序。image-webpack-loader
中的参数,是从官方文档里面抄过来的,大家可以根据自己的需要修改。具体请参考官方文档。
结果展示
在苏南大叔的实验中,一个16kb
的图片,压缩后是6kb
。效果还是不错的。同时,url-loader
的limit
参数也是生效的。这里,不做赘述。
相关链接
- https://newsn.net/say/webpack-url-loader.html
- https://newsn.net/say/pngquant-compress.html
- https://newsn.net/say/cnpm-registry.html
总结
实践一下,然后把感受写下来,这就是经验总结。也可以时刻提醒自己:“我是谁,我做了什么”。不知道, 广大读者,是否同意我的观点呢?
更多webpack
系列教程,请点击苏南大叔的系列文章:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。