loopable / web /vite.config.embed.ts
fsanyoto's picture
Deploy AIOS web (React glide grid + FastAPI slice)
c14ceee verified
Raw
History Blame Contribute Delete
1.48 kB
import { defineConfig } from "vite";
import type { Plugin } from "vite";
import react from "@vitejs/plugin-react";
import { viteSingleFile } from "vite-plugin-singlefile";
// ---------------------------------------------------------------------------
// EMBED build β€” inline EVERYTHING (JS + CSS) into ONE self-contained index.html
// so the grid can be hosted inside another app with no server and no side assets.
// Output: aios-web/web/dist-embed/index.html (consumed by platform/aios_grid.py).
// The standalone build (vite.config.ts -> dist/) is unchanged and keeps the /api
// fetch path; this config only changes packaging, never the app code.
// npm run build:embed
// ---------------------------------------------------------------------------
// Strip the /favicon.svg <link>: it is an EXTERNAL asset ref that singlefile does
// not inline, and it would 404 inside the embed iframe β€” removing it keeps the
// built file genuinely self-contained (no external refs at all).
function stripFaviconLink(): Plugin {
return {
name: "aios-strip-favicon",
transformIndexHtml(html: string): string {
return html.replace(/\s*<link\b[^>]*rel=["']icon["'][^>]*>/i, "");
},
};
}
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), stripFaviconLink(), viteSingleFile()],
base: "./",
build: {
outDir: "dist-embed",
// keep the standalone dist/ intact β€” never emptied by this build
emptyOutDir: true,
},
});