/** * 前端构建:bun build 打包 React SPA → console/public/ * 产物:index.html + assets/main.js + logo/favicon。 */ import { cpSync, mkdirSync } from "node:fs"; import path from "node:path"; const ROOT = path.resolve(import.meta.dir, ".."); const FRONTEND = path.join(ROOT, "console/frontend"); const PUBLIC = path.join(ROOT, "console/public"); mkdirSync(path.join(PUBLIC, "assets"), { recursive: true }); const result = await Bun.build({ entrypoints: [path.join(FRONTEND, "src/main.tsx")], outdir: path.join(PUBLIC, "assets"), naming: "[name].[ext]", target: "browser", minify: true, splitting: false, sourcemap: process.env.WMAILHUB_DEV ? "linked" : "none", }); if (!result.success) { for (const log of result.logs) console.error(log); console.error("[build] frontend build failed"); process.exit(1); } cpSync(path.join(FRONTEND, "index.html"), path.join(PUBLIC, "index.html")); cpSync(path.join(ROOT, "assets/logo.svg"), path.join(PUBLIC, "logo.svg")); cpSync(path.join(ROOT, "assets/favicon.svg"), path.join(PUBLIC, "favicon.svg")); cpSync(path.join(ROOT, "assets/favicon.ico"), path.join(PUBLIC, "favicon.ico")); console.log("[build] frontend -> console/public OK");