first commit
This commit is contained in:
58
scripts/check-web-bundle-size.mjs
Normal file
58
scripts/check-web-bundle-size.mjs
Normal file
@@ -0,0 +1,58 @@
|
||||
import { readFileSync, readdirSync } from "node:fs";
|
||||
import { join, dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { gzipSync } from "node:zlib";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const assetsDir = join(__dirname, "..", "apps", "web", "dist", "assets");
|
||||
|
||||
const thresholds = {
|
||||
indexGzipBytes: 85 * 1024,
|
||||
terminalPanelGzipBytes: 100 * 1024
|
||||
};
|
||||
|
||||
function findLatestChunk(prefix) {
|
||||
const files = readdirSync(assetsDir).filter((file) => file.startsWith(prefix) && file.endsWith(".js"));
|
||||
if (files.length === 0) {
|
||||
throw new Error(`未找到 ${prefix}*.js`);
|
||||
}
|
||||
files.sort();
|
||||
return files.at(-1);
|
||||
}
|
||||
|
||||
function gzipSizeOf(fileName) {
|
||||
const absPath = join(assetsDir, fileName);
|
||||
const raw = readFileSync(absPath);
|
||||
return gzipSync(raw).byteLength;
|
||||
}
|
||||
|
||||
function formatKiB(bytes) {
|
||||
return `${(bytes / 1024).toFixed(2)} KiB`;
|
||||
}
|
||||
|
||||
function check(label, fileName, limitBytes) {
|
||||
const size = gzipSizeOf(fileName);
|
||||
const pass = size <= limitBytes;
|
||||
const status = pass ? "PASS" : "FAIL";
|
||||
console.log(`[bundle-size] ${status} ${label}: ${fileName} gzip=${formatKiB(size)} threshold=${formatKiB(limitBytes)}`);
|
||||
return pass;
|
||||
}
|
||||
|
||||
let ok = true;
|
||||
|
||||
try {
|
||||
const indexChunk = findLatestChunk("index-");
|
||||
const terminalPanelChunk = findLatestChunk("TerminalPanel-");
|
||||
|
||||
ok = check("index", indexChunk, thresholds.indexGzipBytes) && ok;
|
||||
ok = check("TerminalPanel", terminalPanelChunk, thresholds.terminalPanelGzipBytes) && ok;
|
||||
} catch (error) {
|
||||
console.error(`[bundle-size] FAIL ${(error).message}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (!ok) {
|
||||
process.exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user