import { defineConfig } from 'vite'; import { readFileSync, writeFileSync } from 'node:fs'; import { join } from 'node:path'; /** * Setzt die Cache-Version des Service Workers beim Bauen. * * Vorher stand in sw.js ein handgepflegtes `ns-v78`. Wurde es beim Ausliefern vergessen — und das * passiert zuverlaessig —, blieb der alte Cache bestehen: die Aktivierung loescht nur Caches, deren * Name vom aktuellen abweicht. Nutzer sahen dann alte Staende und mussten den Browsercache von Hand * leeren, was man niemandem erklaeren moechte. Die Version kommt jetzt aus der Bauzeit, ist also bei * jedem Ausliefern neu, und der alte Cache raeumt sich beim ersten Start selbst ab. */ function serviceWorkerVersion() { return { name: 'sw-cache-version', closeBundle() { const pfad = join('dist', 'sw.js'); try { const inhalt = readFileSync(pfad, 'utf8'); const version = `ns-${new Date().toISOString().replace(/[-:T]/g, '').slice(0, 14)}`; const neu = inhalt.replace(/^const CACHE = '[^']*';/m, `const CACHE = '${version}';`); if (neu === inhalt) { this.warn('sw.js: CACHE-Konstante nicht gefunden — Version nicht gesetzt'); return; } writeFileSync(pfad, neu); console.log(` Service-Worker-Cache: ${version}`); } catch (e) { this.warn(`sw.js konnte nicht versioniert werden: ${e.message}`); } }, }; } export default defineConfig({ plugins: [serviceWorkerVersion()], build: { outDir: 'dist', assetsDir: 'assets', }, });