minifier.js 1.69 KB
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;