55 lines
1.4 KiB
JavaScript
55 lines
1.4 KiB
JavaScript
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const { minify } = require('terser');
|
|
const { readFile, readdir, writeFile, stat, mkdir, rm } = require('fs');
|
|
const { resolve, sep, dirname } = require('path');
|
|
|
|
const walk = function(dir, done) {
|
|
let results = [];
|
|
readdir(dir, function(err, list) {
|
|
if(err) return done(err);
|
|
let pending = list.length;
|
|
if(!pending) return done(null, results);
|
|
list.forEach(function(file) {
|
|
file = resolve(dir, file);
|
|
stat(file, function(err, stat) {
|
|
if(stat && stat.isDirectory()) {
|
|
walk(file, function(err, res) {
|
|
results = results.concat(res);
|
|
if(!--pending) done(null, results);
|
|
});
|
|
} else {
|
|
results.push(file);
|
|
if(!--pending) done(null, results);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
walk('dist', (err, files) => {
|
|
if(err) throw err;
|
|
|
|
files.forEach((file) => {
|
|
if(file.endsWith('js')) {
|
|
readFile(file, async (err, fileBuf) => {
|
|
if(err) throw err;
|
|
|
|
const minifyCode = (await minify(fileBuf.toString('utf8'), { ecma: 5, compress: true, mangle: false })).code;
|
|
|
|
writeFile(file, minifyCode, { encoding: 'utf8' }, (err) => {
|
|
if(err && err.message.includes('ENOENT')) {
|
|
mkdir(`dist/${dirname(file).split(sep).pop()}`, (err) => {
|
|
if(err) throw err;
|
|
});
|
|
|
|
writeFile(file, minifyCode, { encoding: 'utf8' }, (err) => {
|
|
if(err) throw err;
|
|
});
|
|
} else if(err) {
|
|
throw err;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
});
|
|
});
|