Langsame Webpack-Builds, die bei jedem Speichern zehn Sekunden auf sich warten lassen – das war lange der Standard in der Frontend-Entwicklung. Vite (französisch für „schnell") hat dieses Problem grundlegend gelöst. Das von Evan You – dem Schöpfer von Vue.js – entwickelte Build-Tool nutzt native ES-Module im Browser für den Entwicklungs-Server und liefert damit eine Erfahrung, die sich fundamental von klassischen Bundlern unterscheidet.
Was ist Vite und warum ist es so schnell?
Klassische Build-Tools wie Webpack bündeln beim Start des Dev-Servers alle Module zu einer oder mehreren Dateien. Bei großen Projekten mit Tausenden von Abhängigkeiten dauert dieser Prozess mehrere Sekunden oder sogar Minuten. Vite geht einen anderen Weg: Im Entwicklungsmodus werden Module nicht gebündelt. Stattdessen liefert Vite jedes Modul einzeln über den Browser-nativen ES-Module-Mechanismus (import im Browser) aus.
Für die Abhängigkeiten (node_modules) nutzt Vite esbuild – einen in Go geschriebenen JavaScript-Bundler, der 10–100× schneller als Webpack ist. Diese Abhängigkeiten werden einmalig vor-gebündelt und gecacht. Beim Produktions-Build verwendet Vite hingegen Rollup, das für optimale Output-Größen und Tree-Shaking bekannt ist.
Das Ergebnis: Der Entwicklungs-Server startet in unter einer Sekunde, unabhängig von der Projektgröße.
Hot Module Replacement (HMR)
Vites HMR ist präziser als das von Webpack. Wenn eine Datei geändert wird, muss Vite nicht den gesamten Modul-Graphen neu berechnen. Es ersetzt exakt das geänderte Modul – und nur dieses. Bei React-Komponenten bedeutet das: State bleibt erhalten, die Seite wird nicht vollständig neu geladen. Änderungen am Code sind im Browser innerhalb von Millisekunden sichtbar.
@vitejs/plugin-react statt @vitejs/plugin-react-swc, wenn du maximale Kompatibilität mit bestehenden Babel-Konfigurationen benötigst. Für neue Projekte ist die SWC-Variante deutlich schneller, da SWC ebenfalls in Rust geschrieben ist.
Scaffolding: Projekt-Templates mit create-vite
Ein neues Projekt mit Vite anzulegen ist denkbar einfach:
npm create vite@latest mein-projekt
Vite bietet offizielle Templates für alle gängigen Frontend-Frameworks:
- React (JavaScript und TypeScript)
- Vue 3 (JavaScript und TypeScript)
- Svelte (JavaScript und TypeScript)
- Preact, Lit, Solid
- Vanilla JS ohne Framework
Community-Templates erweitern das Angebot um Next.js-ähnliche Meta-Frameworks oder spezielle Test-Setups. Frameworks wie SvelteKit und Nuxt 3 nutzen Vite intern als Build-Grundlage.
vite.config.ts: Konfiguration
Die Konfigurationsdatei von Vite ist übersichtlich und typsicher. Ein typisches Setup für ein React-TypeScript-Projekt:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
server: {
port: 3000,
proxy: {
'/api': 'http://localhost:8080'
}
},
build: {
outDir: 'dist',
sourcemap: true
}
})
Vite unterstützt .env-Dateien nativ. Variablen mit dem Präfix VITE_ werden automatisch dem Client-Code zugänglich gemacht, ohne Build-Plugins konfigurieren zu müssen.
Plugin-Ökosystem
Vites Plugin-API ist mit der von Rollup kompatibel. Das bedeutet, dass viele Rollup-Plugins auch in Vite funktionieren. Offizielle Plugins decken React, Vue und Svelte ab. Community-Plugins bieten unter anderem:
- PWA-Unterstützung mit
vite-plugin-pwa - SVG als React-Komponenten mit
vite-plugin-svgr - Compression und Bundle-Analyse
- Vitest – ein Vite-nativer Test-Runner
Das Awesome Vite Repository auf GitHub bietet eine kuratierte Liste von Plugins und Ressourcen.
Vergleich: Vite vs. Webpack vs. Parcel vs. esbuild
| Tool | Dev-Server-Start | HMR-Geschwindigkeit | Prod-Build | Konfigurationsaufwand | Ökosystem | TypeScript |
|---|---|---|---|---|---|---|
| Vite | < 1 Sekunde | Sehr schnell (ms) | Rollup (optimiert) | Minimal | Groß, wachsend | Nativ |
| Webpack 5 | 5–60+ Sekunden | Langsam (Sekunden) | Webpack (flexibel) | Hoch | Sehr groß | Via Loader |
| Parcel 2 | 2–10 Sekunden | Mittel | Parcel (automatisch) | Sehr gering | Mittel | Nativ |
| esbuild | Sehr schnell | Sehr schnell | esbuild (minimal) | Gering (API-basiert) | Klein | Nativ |
Webpack bleibt die sicherste Wahl für Legacy-Projekte mit bestehenden komplexen Konfigurationen. Parcel ist ideal für kleine Projekte ohne jegliche Konfiguration. esbuild ist ein low-level Tool für Entwickler, die maximale Kontrolle über den Build-Prozess benötigen. Vite ist der Sweet Spot: schnell, gut konfigurierbar und mit einem starken Ökosystem.
Migration von Webpack zu Vite
Eine Migration von Webpack zu Vite ist in den meisten Create-React-App-Projekten in wenigen Stunden machbar. Die wichtigsten Schritte: react-scripts durch vite ersetzen, index.html in den Root-Ordner verschieben und ein vite.config.ts anlegen. Umgebungsvariablen müssen von REACT_APP_ auf VITE_ umbenannt werden.
Fazit
Vite hat sich in kurzer Zeit zum De-facto-Standard für neue Frontend-Projekte entwickelt. Die radikal schnellen Start- und HMR-Zeiten verbessern die Developer Experience deutlich, und die überschaubare Konfiguration senkt die Einstiegshürde. Für neue Projekte gibt es kaum einen Grund, noch zu Webpack zu greifen.
Häufige Fragen zu Vite
- Kann Vite auch für Backend-Node.js-Projekte genutzt werden?
- Vite ist primär für Frontend-Projekte (Browser-Umgebung) konzipiert. Für Node.js-Backend-Projekte ist esbuild oder tsup die bessere Wahl. Vite unterstützt jedoch SSR-Modus für Frameworks, die sowohl Server- als auch Client-Code benötigen.
- Ist Vite produktionsreif?
- Ja, absolut. Frameworks wie Nuxt 3, SvelteKit und Remix nutzen Vite intern. Millionen von Projekten setzen Vite in Produktion ein. Der Production-Build nutzt Rollup, das seit Jahren für optimale Bundle-Größen bekannt ist.
- Was ist der Unterschied zwischen Vite und Vitest?
- Vite ist das Build-Tool und der Dev-Server. Vitest ist ein darauf aufbauender Test-Runner, der dieselbe Konfiguration und dieselben Plugins nutzt. Vitest ist damit die natürliche Ergänzung zu Vite, wenn man keine separate Jest-Konfiguration pflegen möchte.
- Unterstützt Vite CSS-Module und SCSS?
- Ja, CSS-Module werden nativ unterstützt – Dateien mit der Endung
.module.csswerden automatisch als CSS-Module behandelt. SCSS und Less werden unterstützt, sobald der entsprechende Preprocessor (sassoderless) als Dev-Abhängigkeit installiert ist, ohne weitere Konfiguration.