diff --git a/bin/bundler.mjs b/bin/bundler.mjs index e0628abf..e63aba3e 100644 --- a/bin/bundler.mjs +++ b/bin/bundler.mjs @@ -56,6 +56,20 @@ const dataParts = []; const entryMeta = []; let offset = 0; let cache = new Map(); +let compEnable = (envcomp ?? compress); +let cacheDir = cfg.cacheDir ?? ".bcache"; + +if (compEnable) { + fs.mkdirSync(cacheDir, { recursive: true }); +} + +function fileTime(path) { + try { + return (fs.statSync(path).ctimeMs/1000) | 0; + } catch (e) { + return 0; + } +} for (const { file, virt } of entries) { if (excludes.indexOf(file) >= 0) { @@ -68,20 +82,28 @@ for (const { file, virt } of entries) { } else { if (debug) console.log({ write: virt, from: file }); let data = fs.readFileSync(file); - if ((envcomp ?? compress) && file.endsWith("js")) { - console.log('compress', file); - data = uglify.minify(data.toString(), { - compress: { - merge_vars: false, - unused: false + if (compEnable && file.endsWith("js")) { + let cpath = path.resolve(cacheDir, file); + if (fileTime(cpath) > fileTime(file)) { + data = fs.readFileSync(cpath); + console.log('cached', file); + } else { + console.log('compress', file); + data = uglify.minify(data.toString(), { + compress: { + merge_vars: false, + unused: false + } + }); + // console.log({ to: typeof(data), data }); + if (!data.code) { + if (debug) console.log({ skip: file }); + continue; } - }); - // console.log({ to: typeof(data), data }); - if (!data.code) { - if (debug) console.log({ skip: file }); - continue; + data = Buffer.from(data.code); + fs.mkdirSync(path.dirname(cpath), { recursive: true }); + fs.writeFileSync(cpath, data); } - data = Buffer.from(data.code); } record = { virt, offset, length: data.length }; cache.set(file, record); diff --git a/package.json b/package.json index 0720297b..ef499c79 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,7 @@ "webpack-cli": "^5.1.4" }, "scripts": { - "setup": "npm run setup-mods && npm i && npm run clean && npm run dev -- --dryrun && npm run webpack-ext", + "setup": "npm run setup-mods && npm i && npm run clean && npm run dev -- --alt --dryrun && npm run webpack-ext", "setup-mods": "cd mods && npm i", "build": "npm run prebuild && electron-builder", "build-nopublish": "npm run prebuild && electron-builder --publish never", @@ -92,13 +92,13 @@ "build-win-arm": "npm run build -- --win --arm64", "build-mac": "npm run build -- --mac --arm64", "build-mac-intel": "npm run build -- --mac --x64", - "clean": "rm -rf build data dist src/pack tmp src.old web.old", + "clean": "rm -rf build data dist src/pack tmp src.old web.old .bcache", "docs-dev": "docusaurus start --config conf/docusaurus.config.js", "docs-build": "docusaurus build --config conf/docusaurus.config.js", "docs-serve": "docusaurus serve --config conf/docusaurus.config.js", "docs-check": "prettier --config ./conf/prettier.config.js ./docs --check", "dev": "npm run webpack-ext && gs-app-server --debug --single", - "prod": "npm run webpack-ext && npm run webpack-src prod && gs-app-server", + "prod": "npm run webpack-ext && npm run webpack-src prod && COMPRESS=1 node bin/bundler.mjs && gs-app-server", "prod-pack": "npm run webpack-ext && npm run webpack-src prod", "prod-dryrun": "gs-app-server --dryrun", "start": "npm run prebuild prod && electron .",