Changeset 369aa60 in Klonkt for src/views/shell.ejs


Ignore:
Timestamp:
09/04/2026 11:48:29 AM (4 days ago)
Author:
Robin <roboburr@…>
Branches:
main
Children:
aa521c3
Parents:
4425cc2
Message:

Cache-busting reikt nu ook tot wat de modules zelf ophalen (shaer-724)

De bootstrap hing al ?v= aan elke module die hij zelf laadt. Twee soorten
paden ontsnapten daaraan, en /assets wordt buiten ontwikkeling een jaar
gecachet:

een import BINNEN een module is relatief, en zo\x27n specifier erft de
query niet: ./lib.js naast post.js?v=63 wordt gewoon
/assets/js/mod/lib.js. Elf modules importeren lib.js zo, en juist dat
bestand is gedeeld -- een fout erin overleefde elke MOD_V-bump.

een vendorbestand dat een module zelf ophaalt. read.js deed het goed met
?v=VENDOR_V; lib.js (mijn eigen import van gisteren) en de twee
cropper-verwijzingen in post-edit deden het niet.

Een importmap in de head lost het eerste op zonder die elf imports aan te
raken: hij vertaalt de opgeloste URL naar zijn geversioneerde vorm. MOD_V
staat daarvoor nu als EJS-variabele bovenaan de shell, zodat de importmap
en de bootstrap niet twee nummers kunnen worden. VENDOR_V staat in lib.js
en wordt door read.js en post-edit gedeeld, om dezelfde reden.

Drie toetsen die de REGEL bewaken en niet deze ene plek: elke relatieve
import tussen modules heeft een ingang in de importmap, elk vendorpad
draagt een versie, en de twee nummers zijn er een. Tegenbewijs: haal de
ingang weg of de versie eraf en precies die toets valt.

Volle suite 1248 groen.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/views/shell.ejs

    r4425cc2 r369aa60  
    120120  };
    121121}
     122%>
     123<%
     124// De cache-buster voor alles onder assets/js/mod (en de gedeelde bestanden die
     125// die modules importeren). Stond alleen in de bootstrap onderaan; hij staat nu
     126// hier omdat de importmap in de <head> hem OOK nodig heeft, en twee losse
     127// nummers lopen gegarandeerd een keer uit elkaar.
     128//
     129// Ophogen bij ELKE wijziging in assets/js/mod -- /assets wordt buiten
     130// ontwikkeling een jaar gecachet, dus zonder bump bereikt een reparatie
     131// iedereen behalve wie de fout al heeft.
     132const MOD_V = 63;
    122133%><!DOCTYPE html>
    123134<html lang="<%- _e(lang) %>" data-palette="<%- _e((typeof palette !== 'undefined' && palette) ? palette : (safeSite.palette || 'klonkt')) %>">
     
    339350<script src="/assets/js/htmx.min.js"></script>
    340351
     352<%# De cache-buster reikt ook tot wat de modules ONDERLING importeren (shaer-724).
     353    De bootstrap hangt ?v= aan elke module die hij zelf laadt, maar een import
     354    BINNEN een module is relatief, en een relatieve specifier erft de query
     355    niet: `./lib.js` naast `post.js?v=63` wordt gewoon `/assets/js/mod/lib.js`.
     356    Dat bestand wordt met max-age van een jaar geserveerd, dus het bleef bij
     357    terugkerende bezoekers staan terwijl de modules eromheen ververst werden --
     358    en juist lib.js is gedeeld, dus een fout daarin overleeft elke MOD_V-bump.
     359
     360    Een importmap lost dat op zonder die elf imports aan te raken: hij vertaalt
     361    de OPGELOSTE URL naar zijn geversioneerde vorm. Hij moet in de head staan,
     362    voor de eerste module-import. De toets bij dit bestand bewaakt dat elke
     363    relatieve import onder assets/js hier een ingang heeft. %>
     364<script type="importmap">
     365{"imports":{
     366  "/assets/js/mod/lib.js": "/assets/js/mod/lib.js?v=<%= MOD_V %>",
     367  "/assets/js/shared/post-music-type.js": "/assets/js/shared/post-music-type.js?v=<%= MOD_V %>"
     368}}
     369</script>
     370
    341371<!-- Per-site custom <head> HTML (analytics, verification, etc.) -->
    342372<% if (safeSite.custom_head_html) { %>
     
    505535  // Eén nummer voor de hele map. Te vaak bumpen kost één download; te weinig
    506536  // bumpen kost een bugfix die nooit aankomt.
    507   var MOD_V = 63;
     537  var MOD_V = <%= MOD_V %>;   // uit de EJS-variabele bovenaan; zie de importmap in de head
    508538
    509539  // name -> 1 (aan het laden) of de module-namespace (geladen). Een module
Note: See TracChangeset for help on using the changeset viewer.