Files
pikasTech-unidesk/src/components/frontend/scripts/build.ts
T
2026-05-11 07:39:37 +00:00

30 lines
972 B
TypeScript

import { mkdirSync, writeFileSync } from "node:fs";
import { dirname, join } from "node:path";
const componentRoot = join(import.meta.dir, "..");
const outFile = join(componentRoot, "public", "app.js");
const result = await Bun.build({
entrypoints: [join(componentRoot, "src", "app.tsx")],
target: "browser",
format: "iife",
define: {
"process.env.NODE_ENV": "\"production\"",
"import.meta.env": "{\"MODE\":\"production\"}",
"import.meta.env.MODE": "\"production\"",
},
minify: true,
sourcemap: "none",
});
if (!result.success || result.outputs.length === 0) {
const messages = result.logs.map((item) => item.message).join("; ");
throw new Error(`frontend app build failed: ${messages || "no output"}`);
}
const bundle = await result.outputs[0].text();
mkdirSync(dirname(outFile), { recursive: true });
writeFileSync(outFile, bundle, "utf8");
console.log(JSON.stringify({ ok: true, outFile, bytes: Buffer.byteLength(bundle, "utf8") }));