Vite 8.1.0 stable bringt Bundled Dev Mode (15x schnellerer Start bei 10k-React-Komponenten), WASM-ESM-Importe und Chunk Import Map, erweitert server.fs.deny um .npmrc und private Schlüssel

Vite 8.1.0 stable bringt Bundled Dev Mode (15x schnellerer Start bei 10k-React-Komponenten), WASM-ESM-Importe und Chunk Import Map, erweitert server.fs.deny um .npmrc und private Schlüssel

lschvn

Vite 8.1.0 stable, veröffentlicht am 2026-06-23 von github-actions aus dem v8.1.0-Tag (Commit 63b1489, release: v8.1.0), ist das erste Feature-Release auf dem stabilen Vite-8-Branch seit der 8.1-Beta vom 2026-06-15. Das Release liefert dieselbe Code-Linie wie die Beta, plus einen neuen dokumentierten experimentellen Einstiegspunkt (Bundled Dev Mode), drei Wochen an Bug-Fix-Patches (das Beta-CHANGELOG listet 22 Commits zwischen v8.1.0-beta.0 und v8.1.0), eine verschärfte Default-server.fs.deny-Liste, eine Tilde-gepinnte Rolldown-Abhängigkeit, die es dem Bundler erlaubt, Patch-Releases ohne Vite-PR zu veröffentlichen, und eine Runtime-Deprecation-Warnung für envFile: false. Am selben Tag erscheint Rolldown 1.1.3 mit zehn Folgefixes, darunter ein Crash auf dem Browser-Main-Thread und ein Close-Reentrancy-Fix im Watch-Mode.

Das Release erscheint acht Tage nach der Beta, schneller als die Kadenz von Vite 7 zu Vite 8. Der Announcement-Post des Vite-Teams merkt an, dass Vite nun 41,6 Millionen wöchentliche Downloads auf npm erreicht, „fast die Gesamtzahl der Downloads von Vite 7". Bundled Dev Mode ist das Feature, das den Minor-Line-Bump allein rechtfertigt: 15x Verbesserung beim Cold Start einer React-App mit 10 000 Komponenten und Linear in der Praxis bei 3x schnellerem Cold Start und 10x weniger Netzwerk-Requests.

Bundled Dev Mode, das Top-Feature

Der größte einzelne Zusatz in 8.1.0 stable ist Bundled Dev Mode, der nicht mehr ein Flag ohne Doku ist. Es gibt jetzt einen dedizierten CLI-Einstiegspunkt, --experimental-bundle, und eine dokumentierte Konfigurationsoption, experimental.bundledDev: true:

vite.config.js
import { defineConfig } from 'vite'

export default defineConfig({
  experimental: {
    bundledDev: true,
  },
})

Der Standard-Vite-Dev-Server ist ungebündelt: Jedes Quellmodul wird als eigene ESM-Datei ausgeliefert und der Browser löst den Import-Graph auf. Das hat Vite bei kleineren Apps schnell gemacht, aber sobald Apps über einige tausend Module hinauswuchsen, dominierte der Per-Module-Request-Overhead Cold Start und Full Reloads. Bundled Dev Mode behält die Dev-Server-Ergonomie (HMR, Plugin-Pipeline, Env-Vars), bündelt die App aber mit Rolldown vor und liefert die vorgebauten Chunks aus. Das Vite-Team misst 15x schnelleren Cold Start bei einer React-App mit 10 000 Komponenten, 10x schnellere Full Reloads und instant HMR unabhängig von der App-Größe; das Team von Linear berichtet 3x schnelleres Cold-Start-Rendering, ~40% schnellere Full Reloads und 10x weniger Netzwerk-Requests in ihrer App.

Das Feature bleibt experimentell, weil die Plugin-Oberfläche geformt wird. Die Release Notes weisen darauf hin, dass „bei Verwendung eines Drittanbieter-Plugins dieses eventuell nicht mit diesem Modus funktioniert" und der Fokus auf den Browser-seitigen Core-Features liegt; das Design-Dokument legt den geplanten Plugin-Vertrag offen. Zwei Follow-ups sind bereits in der nächsten 8.x-Linie gemerged: PR #22587 hat bundledDev in DevEnvironment eingefügt statt eine separate Unterklasse zu sein (in 8.1-beta.0 ausgeliefert), und PR #22617 stellt sicher, dass Inkremental-Build-Fehler im bundled-dev-Modus gemeldet statt verschluckt werden.

WASM ESM Integration und Chunk Import Map werden stabil

Die zwei großen Beta-Features gehen unverändert aus dem 8.1-beta.0-Branch in stable: PR #21779 implementiert den WASM-ESM-Integration-Entwurf der WebAssembly-Community-Group als direkte .wasm-Importe ohne ?init-Suffix, und PR #21580 ergänzt build.chunkImportMap, eine opt-in Build-Option, die Browser-Import-Maps verwendet, um Chunk-Hashes stabil zu halten, wenn sich nur eine Quelldatei ändert.

Das WASM-Feature ersetzt das alte Muster import init from './add.wasm?init'; const instance = await init(); durch import { add } from './add.wasm'. Vite parst das Binary, extrahiert Importe und Exporte und emittiert Glue-Code, der eine ordentlich typisierte WebAssembly.Module-Instanz zurückgibt. Die Legacy-Querystring-Suffixe ?init, ?url und ?raw funktionieren weiterhin, sodass bestehende Projekte nicht im Lockstep migrieren müssen. Das Feature ist heute unabhängig vom Browser-Support, da Vite weiterhin das Parsing und die Glue-Generation übernimmt; der Browser-seitige Spec standardisiert nur das langfristige Ziel.

Das Chunk-Import-Map-Feature wirkt auf einer anderen Skala: Es ist eine echte Cache-Stabilitätsverbesserung für Production-Builds, kein Dev-Server-Komfort. In einem Standard-Rolldown-Build enthält jeder Chunk-Dateinamen einen Content-Hash, und die Import-Anweisungen zeigen direkt auf die gehashte URL. Ändert sich eine einzige Quelldatei, bekommt jeder Chunk, der sie (direkt oder transitiv) importiert, einen neuen Hash, was durch den Import-Graph kaskadiert und mehr Chunks als nötig invalidiert. Import-Maps entkoppeln die Import-Anweisung von der Chunk-URL: Die Anweisung sagt import { x } from '/chunks/x.js', die Import-Map sagt /chunks/x.js wird zu /chunks/x-abc123.js aufgelöst, und wenn der Chunk-Inhalt unverändert bleibt, bleibt die gehashte URL gleich und der Browser verwendet sie erneut. Die Implementierung hängt von import.meta.resolve im Browser ab, daher funktioniert chunkImportMap nur in Browsern, die das unterstützen; das begleitende plugin-legacy deckt ältere Browser mit SystemJS ab.

Lightning CSS, einen Schritt näher am Default-Status

PR #21748 sorgt dafür, dass Vite die von Lightning CSS selbst deklarierten Plugin-Abhängigkeiten respektiert, und PR #18389 ergänzt die Unterstützung für externe CSS-Dateien, die in CSS-Dateien importiert werden. Beide Teile waren bereits als Lightning-CSS-Issues unterwegs (lightningcss#479 und lightningcss#877) und sind nun in Vite verdrahtet. Die Release Notes sagen, das Team „denkt darüber nach, den Default-CSS-Preprocessor im nächsten Major-Release auf Lightning CSS umzustellen". Um es jetzt auszuprobieren, setzt man css.transformer: 'lightningcss' in vite.config.js und gibt Feedback in vitejs/vite#13835.

server.fs.deny-Erweiterung

PR #22707 (sapphi.red, feat: extend server.fs.deny list with common files) verschärft den secure-by-default Dev-Server. Die Deny-Liste geht von ['.env', '.env.*', '*.{crt,pem}', '**/.git/**'] (Vite 8.0.x) zu ['.env', '.env.*', '*.{crt,pem,key,p12,pfx,cer,der}', '.npmrc', '.yarnrc.yml', '**/.git/**'] (Vite 8.1.0). Die neuen Einträge decken Schlüssel- und Zertifikats-Material in .key-, .p12-, .pfx-, .cer- und .der-Dateien ab (die gleiche Familie wie die bestehende .crt- und .pem-Abdeckung) plus die Credential-Dateien der Package-Manager .npmrc und .yarnrc.yml.

Die PR-Beschreibung stellt klar, dass das nicht als Vulnerability-Fix gerahmt ist: Es ist nicht möglich, jede sensible Datei abzudecken, aber man fügt die üblichen nach und nach hinzu, und die server.fs.deny-Liste ist dokumentiert, sodass man bei Bedarf weitere hinzufügen kann. In der Praxis verhindert diese Art von Änderung versehentliche Credential-Leaks, wenn ein Entwickler das Projekt-Wurzelverzeichnis ohne benutzerdefinierte server.fs.allow-Konfiguration ausliefert, was der Default für neue Projekte ist. Das Verhalten ist im Dev- und SSR-Modus identisch.

Tilde-gepinntes Rolldown

PR #22693 (use ~ for Rolldown) ist klein, aber für Ecosystem-Nutzer erwähnenswert. Die package.json von Vite pinnte rolldown zuvor als "rolldown": "1.1.1" (exakte Version); 8.1.0 pinnt es als "rolldown": "~1.1.1" (Tilde-Range, akzeptiert jedes 1.1.x). Die Motivation ist operativ: Rolldown veröffentlicht Patch-Releases in schnellerer Kadenz als Vite, und Vite musste rolldown für jeden Patch-Release manuell bumpen. Mit dem Tilde-Range fließen 1.1.2 (2026-06-18) und 1.1.3 (2026-06-24) über das Lockfile in Vite-Installationen ein, ohne dass ein eigener Vite-PR nötig ist.

Das Risiko ist die Versions-Drift im Tilde-Range: Ein Rolldown-Patch, der in 1.1.x landet und Verhalten ändert, könnte in einer Vite-Installation landen, ohne dass ein expliziter Vite-Release nötig ist. Die Mitigation ist, dass Patch-Semver als abwärtskompatibel gedacht ist und die Release-Kadenz des Vite-Teams schnell genug ist, um bei einem schlechten Rolldown-Patch innerhalb von ein bis zwei Tagen einen Vite-Patch nachzuschieben. Das 1.1.3-Release am selben Tag wie dieser Artikel zeigt den neuen Rhythmus: Ein Rolldown-Bugfix kann innerhalb weniger Stunden nach dem Merge in Vite-Installationen landen.

envFile: false-Deprecation-Warnung

PR #22555 ergänzt eine Runtime-Deprecation-Warnung, wenn envFile: false verwendet wird. Das Verhalten ändert sich nicht; das bestehende abwärtskompatible Mapping von envFile: false zu envDir: false bleibt erhalten. Die Motivation ist, dass envFile bereits in der Typdefinition als deprecated markiert war, der Runtime-Pfad jedoch still blieb, was die Migration für Nutzer der programmatischen API erschwerte und das Verhalten inkonsistent zu anderen deprecated Vite-Optionen ließ, die bei Verwendung warnen. Der Fix ist eine einzeilige Warnung plus passende Config-Tests; Nutzer, die bereits envDir: false verwenden, bekommen keine Warnung.

Weitere Änderungen zwischen Beta und Stable

Der CHANGELOG-Diff von 22 Commits zwischen v8.1.0-beta.0 und v8.1.0 besteht größtenteils aus Bug-Fixes plus dem Rolldown-1.1.2-Bump:

  • PR #22714 behandelt fehlerhafte URIs im Memory-Files-Middleware.
  • PR #22715 cachet Falsy-Werte in perEnvironmentState, ein kleiner Correctness-Fix für Environments, die teure Arbeit bei jedem Request neu bewertet haben.
  • PR #22711 sorgt dafür, dass der Glob-HMR-Matcher die caseSensitive-Option respektiert.
  • PR #22713 lässt das nonce-Attribut auf Import-Maps weg, wenn cspNonce nicht gesetzt ist (ein kleiner HTML-Correctness-Fix).
  • PR #22611 überspringt null-wertige Exports in der expandGlobIds-Glob-Auflösung.
  • PR #22691 behält aufgelöste Build-Optionen als Getter, damit Plugins, die config.build introspizieren, die aufgelösten Werte sehen.
  • PR #22706 verwendet literale envPrefix-Queries für Vite Task.
  • PR #22736 inlinet den dev-id-Wert im CSS-Selector (eine kleine client-seitige Größenoptimierung).
  • PR #22724 entfernt das ungenutzte removeRawQuery-Utility.
  • PR #22692 benennt chunkImportMap-bezogene Optionen um, sodass sie die rolldownOptions-Property verwenden.
  • PR #22695 aktualisiert Rolldown auf 1.1.2.

Warum das Timing zählt

Das Vite-Team hat den announcing-vite8-1-Post am selben Tag wie das Release veröffentlicht, was eine schnellere Bearbeitung von „Beta" zu „Stable + Ankündigung" ist als üblich (acht Tage für 8.1 gegenüber etwa drei Wochen für die 8.0-Linie). Die Zahl von 41,6M wöchentlichen Downloads erinnert daran, dass Vite nun in der gleichen Installationsbasis wie React liegt, und die Bundled-Dev-Mode-Metriken sind die Art von Schlagzeilen, die einen Minor-Line-Bump allein rechtfertigen.

Für Nutzer auf der stabilen Vite-8-Linie ist das Upgrade npm install -D vite@8.1.0 plus eine einmalige Config-Anpassung, falls WebSocket-Optionen unter server.hmr gesetzt sind. Für Nutzer, die noch auf Vite 7 oder älter sind, decken die Release Notes zu Vite 8 stable die Rolldown-Migration und die größeren Änderungen der Plugin-Oberfläche ab. Die 8.1-Linie ist heute das empfohlene stabile Ziel für neue Projekte, mit 8.2 und 9.0 bereits als Meilensteine im Vite-Repo offen.

Häufig gestellte Fragen

Oxlint v1.71 und Oxfmt v0.56 liefern die v0.137-Crates-Gewinne aus, bringen 18 neue Linter-Regeln und zähmen die React-Lifecycle-Traversierung mit einem Streamed-Iterator-Refactor

Oxlint apps_v1.71.0 und oxfmt apps_v0.56.0, beide am 2026-06-22 veröffentlicht, schließen den v0.137-Crates-Zyklus auf der Apps-Seite ab. Oxlint v1.71 übernimmt die neue `treeshake pure typed arrays`-Minifier-Passe (#23469), den `prefer-query-selector`-Compound-Selector-Fix, 28 Lint-Bugfixes (größtenteils Yunfei He Fixer-Rewrite-Arbeit), 13 Performance-Einträge, die auf einem Bucketed-Rule-Dispatch-Refactor aufsetzen (#23450, #23452, #23482-#23486, #23489, #23492), sowie den Tokio-nur-für-LSP-Start in oxlint (#23447). Oxfmt v0.56.0 liefert 9 Bugfixes (CRLF-Normalisierung für per `// @ts-ignore` unterdrückten Text in #23701 und #23702, den Member-Chain-Panic-Fix #23698, die Erhaltung von `export default` mit Type-Cast #23697) und 3 Formatter-Performance-Einträge, die Arena-Kopien auf BigInt-, Numeric-Literal- und String-Literal-Text vermeiden. v1.71 ist die erste Apps-Release seit v1.70.0 am 2026-06-15 und die letzte vor der v0.138-Crates-Release, die am Montag 2026-06-29 erscheinen wird.

Node.js 24.18.0 'Krypton' LTS bringt Buffer.poolSize auf 64 KiB, TurboSHAKE und KangarooTwelve in Web Crypto sowie http.writeInformation für beliebige 1xx-Codes

Node.js 24.18.0 'Krypton' (LTS), veröffentlicht am 2026-06-23, liefert den aus Node.js 26.3.0 bekannten Buffer.poolSize-Default von 64 KiB auf der LTS-Linie, ergänzt Web Cryptography um die RFC-9861-Algorithmen TurboSHAKE und KangarooTwelve (PR #62183, 1.521 Ergänzungen, 13 Dateien), führt http.writeInformation für beliebige 1xx-Statuscodes ein (PR #63155, 306 Ergänzungen, 7 Dateien), legt den Start der V8-Precise-Coverage in das JS-Laufzeitsystem (Commit 8c989ec4a3), ergänzt JWK-Import/Export für die Post-Quanten-Schlüsseltypen ML-KEM und SLH-DSA (PR #62706, 842 Ergänzungen, 39 Dateien), bindet im BoringSSL-Pfad ML-DSA, ML-KEM, ChaCha20-Poly1305 und AES-KW in Web Crypto ein (PR #63255), härtet WebCrypto gegen Prototype-Pollution (PR #63363), vereinheitlicht die Schlüsselargumentnamen von crypto.diffieHellman und akzeptiert Schlüsseldaten als Eingabe (PR #62527), nimmt das in 24.16.0 eingeführte Verhalten 'stream: noop pause/resume on destroyed streams' zurück (PR #63834) und veröffentlicht am selben Tag den Minimal-Hotfix 22.23.1, der eine in der Sicherheitsrelease v22.23.0 vom 18.06. eingeführte Änderung am HTTP-Agent zurücknimmt, die an inaktiven Agent-Sockets Stream-Listener angehängt hatte.

Verwandte Artikel

Weitere Berichterstattung zu ähnlichen Themen und Tags.

Oxlint v1.71 und Oxfmt v0.56 liefern die v0.137-Crates-Gewinne aus, bringen 18 neue Linter-Regeln und zähmen die React-Lifecycle-Traversierung mit einem Streamed-Iterator-Refactor
tooling

Oxlint v1.71 und Oxfmt v0.56 liefern die v0.137-Crates-Gewinne aus, bringen 18 neue Linter-Regeln und zähmen die React-Lifecycle-Traversierung mit einem Streamed-Iterator-Refactor

Oxlint apps_v1.71.0 und oxfmt apps_v0.56.0, beide am 2026-06-22 veröffentlicht, schließen den v0.137-Crates-Zyklus auf der Apps-Seite ab. Oxlint v1.71 übernimmt die neue `treeshake pure typed arrays`-Minifier-Passe (#23469), den `prefer-query-selector`-Compound-Selector-Fix, 28 Lint-Bugfixes (größtenteils Yunfei He Fixer-Rewrite-Arbeit), 13 Performance-Einträge, die auf einem Bucketed-Rule-Dispatch-Refactor aufsetzen (#23450, #23452, #23482-#23486, #23489, #23492), sowie den Tokio-nur-für-LSP-Start in oxlint (#23447). Oxfmt v0.56.0 liefert 9 Bugfixes (CRLF-Normalisierung für per `// @ts-ignore` unterdrückten Text in #23701 und #23702, den Member-Chain-Panic-Fix #23698, die Erhaltung von `export default` mit Type-Cast #23697) und 3 Formatter-Performance-Einträge, die Arena-Kopien auf BigInt-, Numeric-Literal- und String-Literal-Text vermeiden. v1.71 ist die erste Apps-Release seit v1.70.0 am 2026-06-15 und die letzte vor der v0.138-Crates-Release, die am Montag 2026-06-29 erscheinen wird.
SWC v1.15.43 bringt den React Compiler als erstklassige Transformation, behebt einen stillen Template-Literal-Minifier-Bug und richtet `unsafe_math` an Terser aus
tooling

SWC v1.15.43 bringt den React Compiler als erstklassige Transformation, behebt einen stillen Template-Literal-Minifier-Bug und richtet `unsafe_math` an Terser aus

SWC v1.15.43, veröffentlicht am 2026-06-22 mit swc_core v71.0.3, liefert den experimentellen Rust-React-Compiler als konfigurierbare SWC-Transformation über .swcrc jsc.transform.reactCompiler (PR #11917, 54 Dateien, 12.986 Hinzufügungen); behebt einen stillen Template-Literal-Minifier-Bug, bei dem `compress` den Text nach der letzten Interpolation des linken Template-Literals beim Verketten zweier Template-Literale abschnitt (#11939); koppelt Number(x) -> +x an SOWOHL `unsafe: true` ALS AUCH `unsafe_math: true`, um mit terser v4.3.11+ übereinzustimmen (#11944, #11949); korrigiert den Geltungsbereich von ES2022-Privatfeld-Brand-Checks (#11953); und bringt sieben interne React-Compiler-Korrekturen (#11940, #11943, #11946, #11950, #11951, #11952, #11957) sowie eine Parser-Korrektur für No-Default-Builds (#11956) und einen Dok-Eintrag zum Sicherheitsumfang nicht vertrauenswürdiger Eingaben (#11937).
Oxc v0.137 bringt dem Minifier das Treeshaken reiner Typed Arrays und Set/Map-Literale bei, liefert ein inkrementelles Scoping-Refresh und behebt einen React-Compiler-Randfall
tooling

Oxc v0.137 bringt dem Minifier das Treeshaken reiner Typed Arrays und Set/Map-Literale bei, liefert ein inkrementelles Scoping-Refresh und behebt einen React-Compiler-Randfall

Der Oxc-Release crates_v0.137.0, veröffentlicht am 2026-06-18, liefert zwei neue Minifier-Treeshaking-Pässe (Treeshake reiner Typed Arrays und Set/Map-Array-Literale über #23469, sowie Inlining von Const-Werten für Read-Only-Variablen über #22593), ein lang angelegtes inkrementelles Scoping-Refresh, das den LiveUsageCollector-Kollektor vollständig entfernt (#23197), einen freundlichen Parser-Fehler für benachbarte JSX-Elemente (#23378), einen React-Compiler-Fix für Imports, auf die nur über einen berechneten Schlüssel verwiesen wird (#23586), sowie zwei Breaking Changes an der ESTree-Config-API (#23573, #23574). Die Minifier-Passliste bekommt zusätzlich einen Proxy-bewussten Fix für Object-Introspection-Aufrufe (#23483) und eine neue Erhaltungsregel für Map/WeakSet/WeakMap mit String-Argument (#23470). v0.137 ist der erste Crates-Release seit v0.135 am 2026-06-08 und der zweite seit Buns nativer React-Compiler-Integration, die am 2026-06-20 landete.

Kommentare

Anmelden Melden Sie sich an, um an der Diskussion teilzunehmen.

Noch keine Kommentare. Seien Sie der Erste, der seine Gedanken teilt.