返回

利用Commitizen、Imagemin和Inquirer实现图片差异化自动压缩

前端

引言

在当今互联网快速发展的时代,页面加载速度已成为用户体验的关键因素。对于前端开发者而言,优化图片资源至关重要。图片往往是页面中体积最大的部分,有效压缩图片可以显著提高页面加载速度。本文将介绍一种利用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,我们创建了一个高效且可扩展的自动化图片压缩解决方案。该解决方案利用差异化压缩,只处理自上次提交以来更改的图片,从而最大程度地优化性能。