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();
|