minifier.js
1.75 KB
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
var fs = require('fs');
var Terser = require('terser');
var platform = process.platform;
var iswin = platform=='win32';
var separator = platform=='win32'?'\\':'/';
var minifier = {
mergeAndMini: function(fileArray, scriptString, root, file) {
var len = fileArray.length;
for(var i = 0; i < len; i ++){
fileArray[i] = root + fileArray[i].split('/').join(separator);
}
var result, indoorRs;
try {
if(fileArray && len > 0) {
// Terser可以直接接受文件路径数组
result = Terser.minify_sync(fs.readFileSync(fileArray[0], 'utf8'));
// 如果有多个文件,需要先合并内容
if(len > 1) {
let code = '';
for(let j = 0; j < len; j++) {
code += fs.readFileSync(fileArray[j], 'utf8') + '\n';
}
result = Terser.minify_sync(code);
}
}
if(scriptString) {
// Terser不需要fromString选项,直接传递代码字符串
indoorRs = Terser.minify_sync(scriptString);
}
} catch (e) {
console.log(e);
console.log(file); // 移除.red调用,除非有chalk等库
process.exit();
}
return {outside: result && !result.error ? result.code : '', inside: indoorRs && !indoorRs.error ? indoorRs.code : ''};
},
mini: function(file) {
try {
// 检查file是文件路径还是代码字符串
if(typeof file === 'string' && fs.existsSync(file)) {
const code = fs.readFileSync(file, 'utf8');
const result = Terser.minify_sync(code);
return result && !result.error ? result.code : '';
} else {
// 假设是代码字符串
const result = Terser.minify_sync(file);
return result && !result.error ? result.code : '';
}
} catch (e) {
console.log(e);
return '';
}
}
};
module.exports = minifier;