easy-tinypng-new-cli
Version:
A cli can be used to compress images with tinypng.com
46 lines (45 loc) • 1.47 kB
JavaScript
import crypto from 'node:crypto';
import fs from 'node:fs';
import path from 'node:path';
import chalk from 'chalk';
export const isBoolean = (arg) => {
return typeof arg === 'boolean';
};
export const isNotFalse = (arg) => {
return !(isBoolean(arg) && !arg);
};
export const isImageExp = (fileName) => /\.(png|jpeg|gif|jpg|bmp|svg|webp)$/i.test(fileName);
// eslint-disable-next-line no-console
const log = console.log;
export function debug(...args) {
log(chalk.green('[fast-imagemin-cli]'), ...args);
}
export function walkSync(currentDirPath, callback) {
fs.readdirSync(currentDirPath, { withFileTypes: true }).forEach((dirent) => {
const filePath = path.join(currentDirPath, dirent.name);
if (dirent.isFile())
callback(filePath, dirent);
else if (dirent.isDirectory())
walkSync(filePath, callback);
});
}
/**
* 获得内容的hash值
*
* @param {String} content 文件内容
* @param {String} encoding 文件的编码,例如:'utf8' 等
* @param {String} type hash算法,例如:'md5'、'sha1'、'sha256'、'sha512' 等
* @returns {String}
*/
export function getHash(content, encoding, type) {
return crypto.createHash(type).update(content, encoding).digest('hex');
}
/**
* 获得文件的hash值
*
* @param {String} filePath 文件路径
* @returns {String}
*/
export function getHashOfFile(filePath) {
return getHash(fs.readFileSync(filePath, 'utf8'), 'utf8', 'md5');
}