mirror of
https://github.com/Xevion/Pac-Man.git
synced 2026-01-31 02:25:04 -06:00
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
This commit is contained in:
@@ -63,12 +63,20 @@ export default function Page() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Get version from build-time injected environment variable
|
||||
const version = import.meta.env.VITE_PACMAN_VERSION;
|
||||
console.log(`Loading Pacman with version: ${version}`);
|
||||
|
||||
win.Module = {
|
||||
canvas,
|
||||
locateFile: (path: string) => {
|
||||
return path.startsWith("/") ? path : `/${path}`;
|
||||
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
||||
return `${normalizedPath}?v=${version}`;
|
||||
},
|
||||
preRun: [],
|
||||
onRuntimeInitialized: () => {
|
||||
console.log("Emscripten runtime initialized, filesystem ready");
|
||||
},
|
||||
// Emscripten calls this on fatal errors (abort/trap/etc)
|
||||
onAbort: (what: unknown) => {
|
||||
const message = typeof what === "string" ? what : "WebAssembly execution aborted";
|
||||
@@ -78,7 +86,7 @@ export default function Page() {
|
||||
};
|
||||
|
||||
const script = document.createElement("script");
|
||||
script.src = "/pacman.js";
|
||||
script.src = `/pacman.js?v=${version}`;
|
||||
script.async = false;
|
||||
|
||||
// Handle script load errors
|
||||
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
interface ImportMetaEnv {
|
||||
readonly VITE_PACMAN_VERSION: string;
|
||||
readonly VITE_API_URL: string;
|
||||
readonly VITE_API_TARGET: string;
|
||||
}
|
||||
|
||||
interface ImportMeta {
|
||||
readonly env: ImportMetaEnv;
|
||||
}
|
||||
+49
-2
@@ -1,11 +1,58 @@
|
||||
import tailwindcss from "@tailwindcss/vite";
|
||||
import react from "@vitejs/plugin-react";
|
||||
import vike from "vike/plugin";
|
||||
import { defineConfig } from "vite";
|
||||
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: [vike(), react(), tailwindcss()],
|
||||
plugins: [pacmanVersionPlugin(), vike(), react(), tailwindcss()],
|
||||
resolve: {
|
||||
alias: {
|
||||
"@": path.resolve(__dirname, "."),
|
||||
|
||||
Reference in New Issue
Block a user