|
@@ -9,41 +9,103 @@
|
|
|
*/
|
|
|
|
|
|
|
|
|
+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);
|
|
|
|
|
|
-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';
|
|
|
- console.log(minFileName);
|
|
|
- let code = '';
|
|
|
- for (const f of action.mergeFiles) {
|
|
|
- code = code + fs.readFileSync(__dirname + '/app' + f, 'utf8');
|
|
|
+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 };
|
|
|
+ cache.text = fs.readFileSync(__dirname + '/app' + file, 'utf8');
|
|
|
+ cache.new_md5 = getMd5(cache.text);
|
|
|
+ cacheInfo.push(cache);
|
|
|
+ }
|
|
|
+ if (!cache.new_md5) {
|
|
|
+ const text = fs.readFileSync(__dirname + '/app' + file, 'utf8');
|
|
|
+ cache.new_md5 = getMd5(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}`);
|
|
|
}
|
|
|
- fs.writeFileSync(minFileName, Uglyfy.minify(code, { mangle: true }).code);
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-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');
|
|
|
-}
|
|
|
+
|
|
|
+ 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();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
|