diff --git a/README.md b/README.md index 2e36d8f..e0aa6cc 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,13 @@ non affilié au jeu original de Mountyhall SARL. ## Versions +- **2.6.3** (2026-06-13) — **Cache-busting** des fichiers du jeu : les balises + ` - - - - - - - + + + + + + + + diff --git a/js/game.js b/js/game.js index 2d9ee65..33d8532 100644 --- a/js/game.js +++ b/js/game.js @@ -4,7 +4,7 @@ "use strict"; -const APP_VERSION = "2.6.2"; +const APP_VERSION = "2.6.3"; /* Alpha : maîtrise initiale haute pour les tests. Remettre 15 % / 15 % à la v1.0 officielle. */ const START_COMP_PCT = 90; diff --git a/server.js b/server.js index aa574c3..70e9a50 100644 --- a/server.js +++ b/server.js @@ -15,6 +15,15 @@ const db = require("./db.js"); const PORT = process.env.PORT || 80; const ROOT = __dirname; +// Jeton de cache-busting injecté dans le HTML (assets référencés en `?v=__V__`) : +// il vaut la version de l'appli, donc change à chaque déploiement → le navigateur +// recharge forcément le nouveau code/CSS sans vider son cache à la main. +const BUILD = (() => { + try { + const m = fs.readFileSync(path.join(__dirname, "js/game.js"), "utf8").match(/APP_VERSION\s*=\s*["']([^"']+)["']/); + return m ? m[1] : String(Date.now()); + } catch { return String(Date.now()); } +})(); const LEVELS_FILE = process.env.LEVELS_FILE || "/data/levels.json"; const WORLD_FILE = process.env.WORLD_FILE || "/data/world.json"; const DB_FILE = process.env.DB_FILE || "/data/mountycrawl.db"; @@ -341,6 +350,9 @@ function handleStatic(req, res, url) { fs.readFile(file, (err, data) => { if (err) { res.writeHead(404); return res.end("introuvable"); } const ext = path.extname(file); + // Pages HTML : on remplace le jeton de cache-busting des assets (`?v=__V__`) + // par la version courante. + if (ext === ".html") data = Buffer.from(data.toString("utf8").replace(/__V__/g, BUILD)); // Code et pages (.html/.js/.css) : toujours revalider pour qu'une mise à // jour (ou une édition de la base reflétée par le code) soit prise tout de // suite, sans cache navigateur périmé. Médias : cache court.