add bundler exclusions

This commit is contained in:
Stewart Allen 2025-10-13 00:47:16 -04:00
commit 86ea2fe10f
2 changed files with 21 additions and 10 deletions

View file

@ -1,11 +1,16 @@
{ {
"compress": false,
"outputs": { "outputs": {
"bundle": "./web/boot/bundle.bin" "bundle": "./web/boot/bundle.bin"
}, },
"inputs": [ "inputs": [
{ "root": "./web", "prefix": "" }, { "root": "web", "prefix": "" },
{ "root": "./src", "prefix": "lib" }, { "root": "src", "prefix": "lib" },
{ "root": "./src/wasm", "prefix": "wasm" }, { "root": "src/wasm", "prefix": "wasm" },
{ "root": "./src/wasm", "prefix": "lib/kiri/wasm" } { "root": "src/wasm", "prefix": "lib/kiri/wasm" }
],
"excludes": [
"src/pack",
"web/boot/bundle.bin"
] ]
} }

View file

@ -4,10 +4,16 @@ import uglify from 'uglify-js';
import { Buffer } from 'buffer'; import { Buffer } from 'buffer';
const cfg = JSON.parse(fs.readFileSync(process.argv[2] || './bin/bundle.config.json', 'utf8')); const cfg = JSON.parse(fs.readFileSync(process.argv[2] || './bin/bundle.config.json', 'utf8'));
const compress = process.env.UGLIFY ? true : false const { inputs, outputs, excludes, compress } = cfg;
const envcomp = process.env.UGLIFY ? JSON.parse(process.env.UGLIFY) : undefined;
// --- recursive directory walker (follows symlinks safely) --- // --- recursive directory walker (follows symlinks safely) ---
function* walk(dir, seen = new Set()) { function* walk(dir, seen = new Set()) {
dir = path.normalize(dir);
if (excludes.indexOf(dir) >= 0) {
return;
}
const real = fs.realpathSync(dir); const real = fs.realpathSync(dir);
if (seen.has(real)) { if (seen.has(real)) {
return; return;
@ -25,7 +31,7 @@ function* walk(dir, seen = new Set()) {
// --- collect all files according to config --- // --- collect all files according to config ---
let entries = []; let entries = [];
for (const input of cfg.inputs) { for (const input of inputs) {
const root = input.root; const root = input.root;
const prefix = input.prefix || ''; const prefix = input.prefix || '';
for (const file of walk(root)) { for (const file of walk(root)) {
@ -42,16 +48,16 @@ let offset = 0;
let cache = new Map(); let cache = new Map();
for (const { file, virt } of entries) { for (const { file, virt } of entries) {
if (file.endsWith('/bundle.bin')) { if (excludes.indexOf(file) >= 0) {
continue; continue;
} }
let record = cache.get(file); let record = cache.get(file);
if (record) { if (record) {
// console.log({ dup: file }); // console.log({ alias: file, to: record.virt });
entryMeta.push({ ...record, virt }); entryMeta.push({ ...record, virt });
} else { } else {
let data = fs.readFileSync(file); let data = fs.readFileSync(file);
if (compress && file.endsWith("js")) { if ((envcomp ?? compress) && file.endsWith("js")) {
console.log('compress', file); console.log('compress', file);
data = uglify.minify(data.toString(), { data = uglify.minify(data.toString(), {
compress: { compress: {
@ -102,7 +108,7 @@ const header = Buffer.concat([count, ...headerParts]);
const full = Buffer.concat([header, ...dataParts]); const full = Buffer.concat([header, ...dataParts]);
// --- write final bundle --- // --- write final bundle ---
const outPath = cfg.outputs.bundle || './bundle.bin'; const outPath = outputs.bundle || './bundle.bin';
fs.mkdirSync(path.dirname(outPath), { recursive: true }); fs.mkdirSync(path.dirname(outPath), { recursive: true });
fs.writeFileSync(outPath, full); // ⚡ write raw binary fs.writeFileSync(outPath, full); // ⚡ write raw binary