-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimagemin.mjs
76 lines (67 loc) · 1.98 KB
/
imagemin.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import imagemin from 'imagemin';
import mozjpeg from 'imagemin-mozjpeg';
import pngquant from 'imagemin-pngquant';
import svgo from 'imagemin-svgo';
import {deleteAsync as del} from 'del';
import fs from 'fs';
const config = {
quality: 85,
};
const getParam = (searchString) => {
const args = process.argv.slice(2);
const param = args.find(arg => arg.startsWith(searchString));
if (param) {
const arr = param.split('=');
if (arr.length === 1) return true;
else if (arr.length === 2) return arr[1];
}
return null;
};
const readFolders = (dir) => {
return new Promise((resolve) => {
const folders = [];
fs.readdir(dir, (error, files) => {
files.forEach((item) => {
if (fs.lstatSync(`${dir}${item}`).isDirectory()) folders.push(`${dir}${item}`);
});
resolve(folders);
});
});
};
const minimize = async (folder) => {
const distFolder = folder.replace('./src/', '').replace('./src', '');
const qLow = (config.quality - 10 > 1) ? (config.quality - 10) / 100 : 0.1;
const qHigh = (config.quality + 10 < 100) ? (config.quality + 10) / 100 : 1;
await imagemin([`${folder}/*.(jpg|JPG|jpeg|JPEG|png|PNG|svg|SVG)`], {
destination: `dist/${distFolder}`,
plugins: [
mozjpeg({ progressive: true, quality: config.quality }),
pngquant({ speed: 6, quality: [qLow, qHigh] }),
svgo({
plugins: [
{removeViewBox: false},
{removeDimensions: true},
{removeStyleElement: true}
]
})
]
});
console.info(`optimized ${folder}`);
}
const imageminFolder = async (src) => {
const folders = await readFolders(`${src}/`);
folders.forEach(async (folder) => {
await minimize(folder);
imageminFolder(folder);
});
}
(async () => {
let q = getParam('q');
if (!Number.isNaN(q)) q = Number.parseInt(q);
else q = null;
if (q < 100 && q > 0) config.quality = q;
console.info('delete dist');
await del('./dist/**/*');
minimize('./src');
imageminFolder('./src');
})();