| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | 'use strict';/** * * * @author Mai * @date * @version */const crypto = require('crypto');const Uglyfy = require('uglify-es');const fs = require('fs');const JsFiles = require('./config/web');const version = require('./config/config.default')({ baseDir: __dirname + '/app', root: __dirname, name: 'calc' }).version;console.log(version);const savePath = __dirname + '/app' + JsFiles.webPath;const cachePath = __dirname + '/app' + JsFiles.cachePath;const cacheInfoFile = cachePath + 'cache.json';let cacheInfo = [];const newCacheInfo = [];if (!fs.existsSync(savePath)) fs.mkdirSync(savePath);if (!fs.existsSync(cachePath)) fs.mkdirSync(cachePath);const loadCache = function () {    if (fs.existsSync(cacheInfoFile)) {        cacheInfo = require(cacheInfoFile);    }};const getMd5 = function (text) {    const hash = crypto.createHash('md5');    hash.update(text);    return hash.digest('hex');};const findCache = function (file) {    let cache = cacheInfo.find(x => { return x.file === file; });    if (!cache) {        cache = { file: file };        cacheInfo.push(cache);    }    if (!cache.new_md5) {        cache.text = fs.readFileSync(__dirname + '/app' + file, 'utf8');        cache.new_md5 = getMd5(cache.text);    }    return cache;};const checkUseCache = function(files) {    for (const f of files) {        const cache = findCache(f);        if (cache.md5 !== cache.new_md5) return false;    }    return true;};const mergeAndMin = function () {    console.time('min');    loadCache();    for (const c in JsFiles.controller) {        const controller = JsFiles.controller[c];        for (const a in controller) {            const action = controller[a];            if (action.mergeFiles && action.mergeFile.length > 0) {                const minFileName = savePath + action.mergeFile + '.' + version + '.min.js';                const cacheFileName = cachePath + action.mergeFile + '.cache.js';                const useCache = checkUseCache(action.mergeFiles);                if (useCache && fs.existsSync(cacheFileName)) {                    fs.copyFileSync(cacheFileName, minFileName);                } else {                    let code = '';                    for (const f of action.mergeFiles) {                        const cache = findCache(f);                        code = code + cache.text;                    }                    fs.writeFileSync(minFileName, Uglyfy.minify(code, { mangle: true }).code);                    fs.copyFileSync(minFileName, cacheFileName);                }                console.log(minFileName, `cache: ${useCache}`);            }        }    }    let needMinCode = '';    for (const nm of JsFiles.needMin) {        needMinCode = needMinCode + fs.readFileSync(__dirname + '/app' + nm, 'utf8');    }    const needMinFileName = __dirname + '/app/public/js/web/global.' + version + '.min.js';    fs.writeFileSync(needMinFileName, Uglyfy.minify(needMinCode, { mangle: true }).code);    const needVersionCss = ['/public/css/main'];    for (const nvc of needVersionCss) {        fs.copyFileSync(__dirname + '/app' + nvc + '.css', __dirname + '/app' + nvc + '.' + version + '.css');    }    fs.writeFileSync(cacheInfoFile, JSON.stringify(cacheInfo.map(x => { return { file: x.file, md5: x.new_md5 || x.md5 }; })));    console.timeEnd('min');};mergeAndMin();
 |