返回
利用Commitizen、Imagemin和Inquirer实现图片差异化自动压缩
前端
2023-11-24 02:07:49
引言
在当今互联网快速发展的时代,页面加载速度已成为用户体验的关键因素。对于前端开发者而言,优化图片资源至关重要。图片往往是页面中体积最大的部分,有效压缩图片可以显著提高页面加载速度。本文将介绍一种利用Commitizen、Imagemin和Inquirer实现差异化图片自动压缩的解决方案。
技术栈介绍
Commitizen :一个用于生成提交消息的规范化工具,可以帮助开发者遵循提交约定。
Imagemin :一个用于压缩PNG、JPG和GIF等常见图像格式的工具包。
Inquirer :一个用于命令行交互的Node.js包,可用于收集用户输入。
实施步骤
1. 安装依赖项
npm install --save-dev commitizen imagemin inquirer
2. 配置Commitizen
创建.cz-config.js
文件并添加以下配置:
module.exports = {
types: [
{ value: 'feat', name: 'feat: 新特性' },
{ value: 'fix', name: 'fix: 修复bug' },
{ value: 'refactor', name: 'refactor: 代码重构' },
{ value: 'perf', name: 'perf: 性能优化' },
{ value: 'test', name: 'test: 增加测试' },
{ value: 'build', name: 'build: 构建系统' },
{ value: 'ci', name: 'ci: 持续集成' },
{ value: 'docs', name: 'docs: 文档更新' },
{ value: 'style', name: 'style: 代码格式' },
{ value: 'chore', name: 'chore: 杂项修改' }
],
messages: {
type: '请选择commit类型:',
scope: '请输入commit范围(可选):',
customScope: '未找到匹配范围,请输入自定义范围:',
subject: '请输入提交主题:',
body: '请输入提交主体(可选):',
footer: '请输入提交页脚(可选):',
confirmCommit: '确认提交?'
}
};
3. 创建压缩脚本
// compress.js
const execa = require('execa');
const fs = require('fs');
async function compressImages() {
const images = fs.readdirSync('images');
for (const image of images) {
const compressedImage = await execa('imagemin', [image, '--output-dir', 'compressed']);
console.log(`压缩了 ${image} 至 ${compressedImage.stdout}`);
}
}
compressImages();
4. 集成Inquirer
修改package.json
文件,在"scripts"
对象中添加以下命令:
"compress": "inquirer --list --message '请选择需要压缩的图片类型:' --choices '['.png','.jpg','.gif']' --output 'type' && node compress.js"
5. 使用指南
运行npm run compress
命令,Inquirer将提示您选择需要压缩的图片类型。选择后,程序将使用Imagemin压缩相应类型的图片。
差异化压缩
该解决方案的关键在于利用Commitizen的提交类型约定。当您提交带有perf: 图片压缩
前缀的提交时,脚本将仅压缩自上次提交以来更改的图片。这样可以节省时间,只处理真正需要压缩的图片。
结论
利用Commitizen、Imagemin和Inquirer,我们创建了一个高效且可扩展的自动化图片压缩解决方案。该解决方案利用差异化压缩,只处理自上次提交以来更改的图片,从而最大程度地优化性能。