add compression caching to bundler

This commit is contained in:
Stewart Allen 2025-10-18 11:55:12 -04:00
commit 9123a70b7b
2 changed files with 37 additions and 15 deletions

View file

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

View file

@ -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 .",