Files
Pac-Man/web/vite.config.ts
Xevion 8d3d69da9d feat(web): add cache busting with version-based asset loading
- Inject git hash via Vite plugin for cache-busting WASM/JS assets
- Enable Emscripten assertions for better runtime error messages
- Log Emscripten runtime init for debugging filesystem readiness
- Expand dockerignore to exclude web build artifacts
2025-12-29 14:27:52 -06:00

76 lines
1.8 KiB
TypeScript

import tailwindcss from "@tailwindcss/vite";
import react from "@vitejs/plugin-react";
import vike from "vike/plugin";
import { defineConfig, Plugin } from "vite";
import path from "path";
import { execSync } from "child_process";
/**
* Vite plugin that injects the Pacman version hash at build time.
* Uses git commit hash in production/dev, falls back to timestamp if git unavailable.
*/
function pacmanVersionPlugin(): Plugin {
let version: string;
function getVersion(mode: string): string {
// Development mode uses fixed "dev" string
if (mode === "development") {
return "dev";
}
// Try to get git commit hash
try {
const hash = execSync("git rev-parse --short HEAD", {
encoding: "utf8",
stdio: ["pipe", "pipe", "pipe"],
}).trim();
if (hash) {
return hash;
}
} catch {
// Git not available or command failed
}
// Fallback to timestamp
return Date.now().toString(36);
}
return {
name: "pacman-version",
config(_, { mode }) {
version = getVersion(mode);
console.log(`[pacman-version] Using version: ${version}`);
return {
define: {
"import.meta.env.VITE_PACMAN_VERSION": JSON.stringify(version),
},
};
},
};
}
export default defineConfig({
plugins: [pacmanVersionPlugin(), vike(), react(), tailwindcss()],
resolve: {
alias: {
"@": path.resolve(__dirname, "."),
},
dedupe: ["react", "react-dom"],
},
build: {
target: "es2022",
},
server: {
// Proxy API requests to the backend server during local development
// In production, both frontend and API are served from the same origin
proxy: {
"/api": {
target: process.env.VITE_API_TARGET || "http://localhost:3001",
changeOrigin: true,
},
},
},
});