tinypng 图片压缩脚本,自动遍历项目图片,并原地
global.tinypngConf = {
apiKeyList: [
// 'XgNgkoyWbdIZd8OizINMjX2TpxAd_Gp3', // 无效 key
// 'IAl6s3ekmONUVMEqWZdIp1nV2ItJL1PC', // 无效 key
'IAl6s3ekmONUVMEqWZdIp1nV2ItJLyPC', // 有效 key
]
}
第三步,赋予脚本文件「可执行」权限,
chmod +x ./mtp.js
第四步,将脚本文件放置到项目所在目录
第五步,在项目所在目录运行脚本
node ./mtp.js
后续使用,仅需最后两步「第四步」「第五步」
全局配置使用方式
第一步,全局安装npm install -g tinypng-script-with-cache
第二步,全局配置 api key
mtp setKey XgNgkoyWbdIZd8OizINMjX2TpxAd_Gp3,IAl6s3ekmONUVMEqWZdIp1nV2ItJLyPC
第三步,在项目所在目录运行脚本mtp
后续使用,无需配置,直接在目标目录运行mtp
global.tinypngConf = {
basePath: '/Users/mjw/Desktop/git/tinypng-script-with-cache/test-img', // 压缩路径
createMd5FormOrigin: false, // 不进行压缩操作,只生成现有图片的 md5 信息,并作为缓存。用于「初次项目接入」及手动清理冗余的「图片md5信息」
apiKeyList: [ // tiny png 的 api key 数组,当其中一个不可用或超过使用次数时,自动切换下一个 key 调用
'IAl6s3ekmONUVMEqWZdIp1nV2ItJLyPC', // 有效 key
]
}
命令传参
参数通过空格区分
参数一:压缩路径
参数二:是否不进行压缩操作,只生成现有图片的 md5 信息。除空字符串
''
外,其余值均为 true
参数三:apiKeyList,以逗号区分,
传参参考
node ./mtp.js /Users/mjw/Desktop/git/tinypng-script-with-cache/test-img '' IAl6s3ekmONUVMEqWZdIp1nV2ItJLyPC
配置合并优先级源码
const vfs = require('vinyl-fs');
let tinypng = require('./tinypng-with-cache')
let apiKeyList = [] // 接口 key 默认为空
let basePath = process.cwd() // 默认运行脚本所在目录
let createMd5FormOrigin = false // 不进行压缩操作,只生成现有图片的 md5 信息,并作为缓存。用于「初次项目接入」及手动清理冗余的「图片md5信息」
// 如果有全局传值
if (global.tinypngConf) {
basePath = tinypngConf.basePath || basePath
apiKeyList = tinypngConf.apiKeyList || apiKeyList
createMd5FormOrigin = tinypngConf.createMd5FormOrigin || createMd5FormOrigin
}
// 动态参数传值
basePath = process.argv[2] || basePath
createMd5FormOrigin = process.argv[3] || createMd5FormOrigin
apiKeyList = process.argv[4] ? process.argv[4].split(',') : apiKeyList
let fileFilter = tinypngConf.fileFilter || [
basePath + '/**/*.png',
basePath + '/**/*.jpg',
basePath + '/**/*.jpeg',
`!${basePath}/**/node_modules/**`, // 忽略无需遍历的文件,路径匹配语法参考:https://www.gulpjs.com.cn/docs/getting-started/explaining-globs/
`!${basePath}/**/dist/**`,
]
console.log({
basePath,
apiKeyList,
fileFilter,
createMd5FormOrigin,
})
if (!apiKeyList.length) {
return console.error('tinypng-script-with-cache', 'tinypny key 列表不能为空!')
}
vfs.src(fileFilter, {
base: './', // 对文件使用相路径,为了后面覆盖源文件
nodir: true, // 忽略文件夹
})
.pipe(tinypng({
apiKeyList,
reportFilePath: basePath + '/tinypngReport.json', // 不设置,则不进行日志记录
md5RecordFilePath: basePath + '/tinypngMd5Record.json', // 不设置,则不进行缓存过滤
minCompressPercentLimit: 10, // 默认值为零,最小压缩百分比限制,为保证图片质量,当压缩比例低于该值时,保持源文件,避免过分压缩,损伤图片质量
createMd5FormOrigin, // 不进行压缩操作,只生成现有图片的 md5 信息,并作为缓存。用于「初次项目接入」及手动清理冗余的「图片md5信息」
}))
.pipe(vfs.dest('./', { overwrite: true })) // 覆写原文件
项目地址
二次开发,生成自定义脚本
git clone 下载项目
npm install 安装依赖
修改「tinypng-mjw.js」与「tinypng-with-cache.js」源文件
执行npx webpack --config webpack.config.js
命令,进行打包
生成目标文件dist/mtp.js
测试资源
test-img:图片压缩测试目录
test-img-origin:测试图片备份目录,用于恢复测试
运行效果
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。