@tols/gm-base
v1.0.4
Published
用于@tols gm工具的基础类。具有数据定义,生命周期等能力
Downloads
3
Readme
说明
@tols/gm-base
是@tols gm所有工具的基础类。它提供了一套批处理的解决方案。具有数据定义、生命周期钩子等能力。
安装
npm i -S @tols/gm-base
使用示例
const gmBase = require('@tols/gm-base')
gmBase({
//=============== 数据定义部分 =============
/**
* 当前工具需要用到的变量数据
* 每次都返回一个全新的数据对象
* @returns {{}}
*/
data () {
return {
directory: 'dist', // 压缩之后存放到指定目录的文件夹名称。默认''
threads: 5, // 支持同时处理多个文件,建议5~8个。默认5
qualityVal: 60, // 压缩质量值,0 ~ 100之间
progressInfo: ['压缩进度', '正在压缩'] // 进度条信息提示
}
},
//=============== 生命周期部分 =============
/**
* 收集信息之前的钩子
* @param qualityVal 压缩质量的默认值。注:这里是data参数的解构
* @returns {*[]} 可返回需要收集信息的问题。注:源文件目录name值必须是'srcPath',存放目录name值必须是'distPath'
*/
beforeCollectInfo ({threads, qualityVal}) {
return [
{
type: 'input',
message: '请输入要同时压缩的文件数量:',
name: 'threads',
default: threads
},
{
type: 'input',
message: '请输入压缩后的图片质量:',
name: 'qualityVal',
default: qualityVal
},
{
type: 'input',
message: '请输入要压缩的图片源文件目录:',
name: 'srcPath',
default: ''
},
{
type: 'input',
message: '请输入压缩之后图片将要存放的目录:',
name: 'distPath',
default: ''
}
]
},
/**
* 开始批量压缩图片之前的钩子
* @param data 开始时定义的data数据对象
* @param answers 收集信息阶段的信息对象
*/
beforeStart ({data, answers, fromCode}) {
// 如果来自代码逻辑操作,则不往下执行数据验证
if (fromCode) {
return
}
// 以下操作来自命令行
// 为data赋值收集到的信息
data.threads = Number(answers.threads)
data.qualityVal = Number(answers.qualityVal)
// 数据验证
if (!answers.threads || typeof data.threads !== 'number' || data.threads !== data.threads) {
throw '请输入要同时压缩的文件数量'
}
if (!answers.qualityVal || typeof data.qualityVal !== 'number' || data.qualityVal !== data.qualityVal) {
throw '请输入压缩后的图片质量'
}
if (!answers.srcPath) {
throw '请输入要压缩的图片源文件目录'
}
if (!answers.distPath) {
throw '请输入压缩之后图片将要存放的目录'
}
},
/**
* 批处理实时抛出的钩子。(每处理一张图片触发一次)
* @param data 开始时定义的data数据对象
* @param srcFile 当前图片的文件路径
* @param distFile 当前图片即将要保存的文件路径
* @param gm 图像处理器实例
* @param warnings 警告信息收集器(数组)
* @param next 处理图片之后的回调,调用该方法会进入下一个处理
*/
batching ({data, srcFile, distFile, gm, warnings, next}) {
// 根据业务逻辑,可以收集一些警告信息
/* if (isWarnings) {
warnings.push('一些警告信息')
} */
// 开始处理图片
gm(srcFile)
.quality(data.qualityVal)
.write(distFile, function (err) {
if (err) {
console.log(err)
return
}
next()
})
},
/**
* 批量处理完毕之后的钩子
* @param distPath 保存图片的目录路径
* @param chalk 文字着色器
* @param warnings 警告信息收集器(数组)
*/
afterBatch ({distPath, chalk, warnings}) {
console.log(`您的图片已经压缩完毕。\n存放在: ${distPath}`)
if (warnings.length) {
console.log(chalk.yellow(`温馨提示:检测到有以下些图片被拉扯,可能会导致模糊!\n${warnings.join('\n')}`))
}
}
})