安装
# 注意要加上-f
npm install -f image-util -g
使用例子
- 处理image目录下的图片, 格式全部转换为webp(默认), 质量分数
50(1-100), 输出到public目录下
ci -t image -f webp -q 50 -d public
- 列出image目录下, 文件名(文件名+后缀)没出现在当前目录下其他文件中的内容, 排除
node_modules,test目录, 即列出image目录下没被依赖的文件.
suf -t image -e node_modules test
背景
前段时间用了 lighthouse 测试一个门户项目的时候,看到 lcp 比较高,图片资源的大小也很大,可优化的空间比较大,于是我就开始思考怎么去优化一下图片的大小。
最简单的方案就是重新在蓝湖上,下载压缩率更高体积更小的图片设计资源,通过手工的方式,但这个显然不现实,因为一个项目里,图片资源非常得多,一个个下载替换也很容易出错,故 pass 掉。
或者通过 minipng 这个网站,但是好多图片资源格式并不是 png 的,而且 webp 格式才是 lighthouse 推荐的图片格式,这个不可行。
由于这个门户项目是基于 Nextjs 的,它有自己的 compiler ,所以想通过 webpack 的图片压缩插件image-minimizer-webpack-plugin来做也不行。
经常持续的调研,发现Nextjs推荐的一个高效的图片资源处理npm 包sharp,它可以很好的压缩图片资源,调整图片的 quality 指标,改变图片的格式,包括webp、jpg、png等等,webp也是lighthouse 最为推荐的图片格式,于是我就基于sharp封装了一个命令行工具,实现了通过传参,改变指定目录下的图片格式、质量、输出到指定的目录并展示压缩率等等的功能。
然后还顺手解决了一个小问题,这个问题是这样的。项目需求经常会改动,往往是一个模块开发好了,有可能突然就废弃了,当这个旧模块被确定永久废弃,我们肯定是要把模块的代码删除干净的,此时,删除废弃模块是比较安全的操作,因为,如果别的模块有在依赖这个废弃模块的任何代码,那么框架在 run 的时候必定会报错,我们也很容易发现废弃的模块中有被其他模块依赖的代码这个问题,随即可以马上修复它。
但是,通常图片资源都不会放在和模块代码放在一起,因为图片我们是固定放在一个目录下,例如 public 、asset ,方便我们用上述的命令行工具去压缩。所以,当我们删除了废弃模块,如果不仔细检查并列出废弃模块所引用的图片资源,不做删除处理,那么废弃的图片资源也会慢慢越来越多,造成浪费。
所以,我还在上述的命令行工具中,加入了一个小功能,交互式地删除废弃的文件资源。实现的逻辑是: 根据给出目录位置,列出目录位置下的所有文件资源,全局递归查找所列出的文件名+格式名是否出现在项目目录下其他文件里。如果其他文件中的内容,查找到所列出的文件名+格式名,即判定为该文件存在被依赖关系的,否则,即是可删除的文件,可以通过命令行交互式式地删除。