fix: MapLibre-Worker vollstaendig buendeln, damit die Linie auch live erscheint

Der vorige Fix wirkte nur im Dev-Modus. Live blieb die Trail-Linie aus,
obwohl das Worker-Asset ausgeliefert wurde (HTTP 200).

Ursache: Das per ?url eingebundene Asset ist nur eine Rohkopie der
Paketdatei. Deren erste Zeile ist ein relativer Import auf die
Nachbardatei:

    import{...}from"./maplibre-gl-shared.mjs"

Diese Datei kopiert der Build nicht mit — unter
_app/immutable/assets/maplibre-gl-shared.mjs antwortet die Produktion mit
404. Der Worker startet dadurch, sein Import scheitert, und er antwortet auf
keine Nachricht mehr. GeoJSON-Quellen bleiben im Ladezustand, es wird keine
Linie gezeichnet. Im Dev-Modus fiel das nicht auf, weil Vite dort aus
node_modules aufloest, wo die shared-Datei danebenliegt.

?worker&url statt ?url laesst Vite den Worker samt Abhaengigkeiten zu einer
eigenstaendigen Datei buendeln.

Verifiziert am Build-Artefakt: Der Worker liegt nun unter
_app/immutable/workers/ und ist 469695 statt 19122 Bytes gross, enthaelt also
den shared-Code; eine Referenz auf maplibre-gl-shared existiert nicht mehr,
womit der 404 zur Laufzeit entfaellt. Ueber "node build" ausgeliefert
antwortet er mit HTTP 200 in voller Groesse. svelte-check ohne Fehler, alle
19 Tests bestehen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Daniel Michelberger 2026-08-14 16:51:58 +02:00
parent 6273f20484
commit 0432540d5a

View file

@ -8,17 +8,20 @@
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'
// MapLibre 6 liegt als drei Dateien vor (Hauptdatei, shared, worker) und
// lädt den Worker zur Laufzeit relativ zum eigenen Verzeichnis nach. Beides
// — Vites Dependency-Optimierung im Dev-Modus wie der Produktionsbuild —
// bringt den Worker nicht an eine Stelle, an der er seine Nachbardatei
// maplibre-gl-shared.mjs findet. 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.
// ?worker&url bündelt den Worker samt Abhängigkeiten zu einer eigenständigen
// Datei — ein blosses ?url würde nur die Rohdatei kopieren und ihren
// relativen Import auf ./maplibre-gl-shared.mjs unaufgelöst lassen (404).
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url'
maplibregl.setWorkerUrl(workerUrl)