In the interactive command line, select the corresponding folder to compress all pictures and sub-pictures in the picture folder
// http://tinify.com
const tinify = require('tinify')
// https://www.npmjs.com/package/inquirer
const inquirer = require('inquirer')
const fs = require('fs')
const path = require('path')
const chalk = require('chalk')
// const md5File = require('md5-file')
tinify.key = "YOUR_API_KEY"
// console.log(chalk`{hex('#06f')
const questions = [
{
type: 'list'.name: 'homeDirectory'.message: 'Please select the home directory to be compressed'.choices: ['A'.'B'].default: 'A'}, {type: 'list'.name: 'dir'.message: 'Please select the page to be compressed'.choices: function(answers) {
const { homeDirectory } = answers
PAGE_ROOT_PATH = homeDirectory === 'A' ? './src/aDirectory/' : './src/bDirectory/'
dirs = fs.readdirSync(PAGE_ROOT_PATH)
dirs.sort((a, b) = > {
return fs.statSync(PAGE_ROOT_PATH + b).mtime.getTime() -
fs.statSync(PAGE_ROOT_PATH + a).mtime.getTime()
})
return dirs
},
}
]
let PAGE_ROOT_PATH = './src/pages/'
let dirs = null
const imgFilePathArr = []
function deepGetDirectories(distPath) {
const dirArr = fs.readdirSync(distPath)
dirArr.forEach(file= > {
if (fs.statSync(distPath + file).isDirectory()) {
deepGetDirectories(distPath + file+'/')}else {
if (file.match(/(\.png|\.jpg|\.jpeg)$/)) {
imgFilePathArr.push(path.resolve(distPath + file))
}
}
})
}
inquirer.prompt(questions).then(({ dir }) = > {
console.log(chalk'\r\n{hex('#090') :${PAGE_ROOT_PATH + dir }/img}\r\n`)
// let db = JSON.parse(fs.readFileSync(__dirname + '/db.json', 'utf8'))
deepGetDirectories(PAGE_ROOT_PATH + dir + '/img/')
imgFilePathArr.forEach(file= > {
// const hash = md5File.sync(file)
// if (hash ! == db[file]) {
const source = tinify.fromFile(file)
source.toFile(file).then(() = > {
// db[file] = md5File.sync(file)
// fs.writeFileSync(__dirname + '/db.json', JSON.stringify(db))
console.log(chalk'{hex('#09f') compression completes:${file}} `)})// } else {
/ / the console. The log (chalk ` {hex (' # 0 f9) files without compression: ${file}} `)
// }})})// Compress: "node./xx/compressor.
// NPM run compress
Copy the code