From 6273f20484e161b95362a68006a8063dddb66aef Mon Sep 17 00:00:00 2001 From: Daniel Michelberger Date: Fri, 14 Aug 2026 16:23:21 +0200 Subject: [PATCH] fix: Trail-Linie auf der Karte durch expliziten MapLibre-Worker-Pfad MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Karte zeigte Kacheln und stand am richtigen Ort, zeichnete aber weder in der Trail-Uebersicht noch auf der Detailseite eine Linie. Das Hoehenprofil aus denselben Versionsdaten wurde dagegen gerendert. Ursache: MapLibre 6 liegt als drei Dateien vor (Haupteinstiegspunkt, shared, worker) und laedt den Worker zur Laufzeit ueber import.meta.url aus dem eigenen Verzeichnis nach. Vites Dependency-Optimierung buendelt jedoch nur den Haupteinstiegspunkt nach node_modules/.vite/deps — daneben liegt keine maplibre-gl-worker.mjs. Der Worker startet dadurch zwar und ist verbunden, sein Import laeuft aber ins Leere: Er antwortet auf keine Nachricht mehr. GeoJSON-Quellen bleiben deshalb dauerhaft im Ladezustand (isSourceLoaded false, keine Source-Features, _updatePromise loest nie auf), und es gibt nichts zu zeichnen. Rasterkacheln brauchen keinen Worker, deshalb erschien die Karte trotzdem und der Fehler sah nach fehlenden Daten aus. setWorkerUrl mit einem ?url-Import zeigt auf die echte Datei und umgeht das, ohne in Vites Optimierung einzugreifen. Ein optimizeDeps.exclude waere der naheliegendere Weg gewesen, bricht hier aber die Modulaufloesung von SvelteKit. Verifiziert: Linie erscheint in Uebersicht und Detailseite; die Daten waren durchgehend intakt (LineString, 225 Koordinaten). svelte-check ohne Fehler, alle 19 Tests bestehen, npm run build erfolgreich, und die Worker-Datei liegt als Asset im Produktionsbuild und wird vom Client-Bundle referenziert. Co-Authored-By: Claude Opus 5 (1M context) --- frontend/src/lib/components/TrailMap.svelte | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/frontend/src/lib/components/TrailMap.svelte b/frontend/src/lib/components/TrailMap.svelte index 566d045..cf68304 100644 --- a/frontend/src/lib/components/TrailMap.svelte +++ b/frontend/src/lib/components/TrailMap.svelte @@ -8,6 +8,19 @@ import * as maplibregl from 'maplibre-gl' import type { Map as MapLibreMap, Marker } from 'maplibre-gl' import 'maplibre-gl/dist/maplibre-gl.css' + // MapLibre 6 liegt als drei Dateien vor und lädt seinen Worker zur + // Laufzeit über import.meta.url aus dem eigenen Verzeichnis nach. Vites + // Dependency-Optimierung bündelt aber nur den Haupteinstiegspunkt nach + // node_modules/.vite/deps — daneben liegt keine Worker-Datei. Der Worker + // startet dann zwar, sein Import läuft ins Leere, und er antwortet auf + // keine Nachricht mehr. Folge: GeoJSON-Quellen bleiben dauerhaft im + // Ladezustand, es wird keine Trail-Linie gezeichnet. Rasterkacheln + // brauchen keinen Worker, deshalb erscheint die Karte trotzdem und der + // Fehler sieht nach fehlenden Daten aus. + // Der explizite Pfad umgeht das: ?url liefert die echte Datei-URL. + import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?url' + + maplibregl.setWorkerUrl(workerUrl) type LineGeoJSON = { type: 'LineString'; coordinates: [number, number][] } type MarkerData = {