Dev News Daily ENDE

SvelteKit 3.0 verlangt Vite 8 und TypeScript 6 und ersetzt $lib durch #lib

SvelteKit 3.0.0 ist am 1. Oktober erschienen, zusammen mit neuen Hauptversionen aller offiziellen Adapter: adapter-node 6, adapter-vercel 7, adapter-netlify 7, adapter-cloudflare 8 und adapter-static 4, dazu @sveltejs/package 3 und enhanced-img 1.0. Die Versionshinweise umfassen Dutzende Einträge, die meisten davon als inkompatibel markiert.

Neue Mindestversionen. SvelteKit 3 setzt Vite 8 voraus, mindestens 8.0.12 – die erste Vite-Version mit dem stabilen Rolldown 1.0 –, außerdem @sveltejs/vite-plugin-svelte 7 und TypeScript 6. Svelte-Konfigurationsoptionen müssen nun über das Vite-Plugin übergeben werden.

Änderungen, die die meisten Anwendungen treffen.

  • Der Alias $lib wird durch #lib ersetzt, die Option files.lib entfällt, und Importe über #lib brauchen ausdrückliche Dateiendungen.
  • base, assets und resolveRoute verschwinden aus $app/paths. Die neue Option kit.paths.origin ersetzt sowohl kit.prerender.origin als auch die Umgebungsvariable ORIGIN des Node-Adapters.
  • Die goto-Optionen noScroll und keepFocus werden zu einer einzigen Option reset; das Attribut data-sveltekit-reset ersetzt die beiden entsprechenden Attribute. goto lehnt nun eine URL ab, die keiner Route der Anwendung entspricht.
  • refreshAll kommt hinzu, invalidateAll gilt als veraltet. Ein Klick auf einen Link zur aktuellen URL führt jetzt alle Load-Funktionen und Abfragen erneut aus.
  • error(status, {...}) ist zugunsten von error(status, message, {...}) veraltet, alle Fehler laufen nun durch den Hook handleError, und dieser kann den Statuscode beeinflussen.

Verhalten auf dem Server und Sicherheit. Formularübermittlungen von fremden Ursprüngen ohne Content-Type-Header werden abgewiesen. Die veraltete CSRF-Option checkOrigin entfällt zugunsten von trustedOrigins. Abfrageparameter, die mit x-sveltekit- beginnen, werden zurückgewiesen. Verzeichnisse namens server gelten überall im Projekt als nur für den Server bestimmt, außer unter src/routes und im Asset-Verzeichnis. Cookie-Namen dürfen nach dem Wechsel auf cookie v2 nur noch ASCII-Zeichen enthalten. Antworten von Form Actions tragen den HTTP-Status, den fail zurückgibt.

Kleinere Streichungen. Die Option preloadStrategy entfällt, weil immer modulepreload genutzt wird; eine neue Option linkHeaderPreload lädt über den Link-Header vor. Die Versionsabfrage erkennt neue Deployments jetzt auch bei Daten- und Formularantworten und beim Fokus auf den Tab, ihr Standardintervall beträgt eine Stunde. Tracing verlässt den experimentellen Bereich. Dateien für Remote Functions werden nur noch mit experimental.remoteFunctions akzeptiert.

SvelteKit 3.0 verlangt Vite 8 und TypeScript 6 und ersetzt $lib durch #lib
SvelteKit 3.0 verlangt Vite 8 und TypeScript 6 und ersetzt $lib durch #lib — Dev News Daily

Was das bedeutet

Das ist eine Migrationsversion, keine Funktionsversion. Teams sollten zuerst die Umstellung auf Vite 8 und TypeScript 6 planen, weil alles andere davon abhängt, und dann die Änderungen an $lib, $app/paths und goto abarbeiten, die den meisten Code treffen. Anwendungen mit dem Node-Adapter, die ORIGIN setzen, brauchen die neue Einstellung paths.origin, sonst können auf dem Server erzeugte URLs falsch ausfallen.