Turbopack
Turbopack ist ein inkrementeller Bundler, optimiert für JavaScript und TypeScript, in Rust geschrieben und in Next.js integriert. Sie können Turbopack sowohl mit dem Pages- als auch mit dem App-Router für eine viel schnellere lokale Entwicklungsumgebung verwenden.
Warum Turbopack?
Wir haben Turbopack entwickelt, um die Leistung von Next.js zu steigern, einschließlich:
- Einheitlicher Graph: Next.js unterstützt mehrere Ausgabeumgebungen (z. B. Client und Server). Die Verwaltung mehrerer Compiler und das Zusammenfügen von Bundles kann mühsam sein. Turbopack verwendet einen einheitlichen Graph für alle Umgebungen.
- Bundling vs. Native ESM: Einige Tools überspringen das Bundling in der Entwicklung und verlassen sich auf das native ESM des Browsers. Dies funktioniert gut für kleine Apps, kann aber große Apps aufgrund übermäßiger Netzwerkanfragen verlangsamen. Turbopack bundelt in der Entwicklung, aber auf optimierte Weise, um große Apps schnell zu halten.
- Inkrementelle Berechnung: Turbopack parallelisiert die Arbeit über Kerne hinweg und cacht Ergebnisse bis auf die Funktionsebene. Sobald eine Arbeit erledigt ist, wiederholt Turbopack sie nicht.
- Lazy Bundling: Turbopack bundelt nur das, was tatsächlich vom Dev-Server angefordert wird. Dieser faule Ansatz kann die anfänglichen Kompilierungszeiten und den Speicherverbrauch reduzieren.
Erste Schritte
Um Turbopack in Ihrem Next.js-Projekt zu aktivieren, fügen Sie das Flag --turbopack
zu den dev
- und build
-Skripts in Ihrer package.json
-Datei hinzu:
Aktuell ist Turbopack für dev
stabil, während build
sich in der Alpha-Phase befindet. Wir arbeiten aktiv an der Produktionsunterstützung, während Turbopack sich der Stabilität nähert.
Unterstützte Funktionen
Turbopack in Next.js bietet Zero-Configuration für gängige Anwendungsfälle. Nachfolgend finden Sie eine Zusammenfassung der out-of-the-box unterstützten Funktionen sowie einige Hinweise darauf, wie Sie Turbopack bei Bedarf weiter konfigurieren können.
Sprachfunktionen
Funktion | Status | Hinweise |
---|---|---|
JavaScript & TypeScript | Unterstützt | Verwendet SWC unter der Haube. Type-Checking wird nicht von Turbopack durchgeführt (führen Sie tsc --watch aus oder verlassen Sie sich auf Ihre IDE für Type Checks). |
ECMAScript (ESNext) | Unterstützt | Turbopack unterstützt die neuesten ECMAScript-Funktionen, entsprechend der Abdeckung von SWC. |
CommonJS | Unterstützt | require() -Syntax wird out-of-the-box unterstützt. |
ESM | Unterstützt | Statische und dynamische import -Anweisungen werden vollständig unterstützt. |
Babel | Teilweise nicht unterstützt | Turbopack enthält standardmäßig kein Babel. Sie können jedoch Babel-Loader über die Turbopack-Konfiguration konfigurieren. |
Framework- und React-Funktionen
Funktion | Status | Hinweise |
---|---|---|
JSX / TSX | Unterstützt | SWC verarbeitet die JSX/TSX-Kompilierung. |
Fast Refresh | Unterstützt | Keine Konfiguration erforderlich. |
React Server Components (RSC) | Unterstützt | Für den Next.js App Router. Turbopack stellt sicher, dass das Server/Client-Bundling korrekt ist. |
Root-Layout-Erstellung | Nicht unterstützt | Die automatische Erstellung eines Root-Layouts im App Router wird nicht unterstützt. Turbopack weist Sie an, es manuell zu erstellen. |
CSS und Styling
Funktion | Status | Hinweise |
---|---|---|
Globales CSS | Unterstützt | Importieren Sie .css -Dateien direkt in Ihrer Anwendung. |
CSS-Module | Unterstützt | .module.css -Dateien funktionieren nativ (Lightning CSS). |
CSS-Nesting | Unterstützt | Lightning CSS unterstützt modernes CSS-Nesting. |
@import-Syntax | Unterstützt | Kombinieren Sie mehrere CSS-Dateien. |
PostCSS | Unterstützt | Verarbeitet automatisch postcss.config.js in einem Node.js-Worker-Pool. Nützlich für Tailwind, Autoprefixer usw. |
Sass / SCSS | Unterstützt (Next.js) | Für Next.js wird Sass out-of-the-box unterstützt. In Zukunft wird die eigenständige Verwendung von Turbopack wahrscheinlich eine Loader-Konfiguration erfordern. |
Less | Geplant über Plugins | Noch nicht standardmäßig unterstützt. Wird wahrscheinlich eine Loader-Konfiguration erfordern, sobald benutzerdefinierte Loader stabil sind. |
Lightning CSS | In Verwendung | Verarbeitet CSS-Transformationen. Einige weniger genutzte CSS-Module-Funktionen (wie :local/:global als eigenständige Pseudo-Klassen) werden noch nicht unterstützt. Weitere Details finden Sie unten. |
Assets
Funktion | Status | Hinweise |
---|---|---|
Statische Assets (Bilder, Schriftarten) | Unterstützt | Das Importieren von import img from './img.png' funktioniert out-of-the-box. In Next.js wird ein Objekt für die <Image /> -Komponente zurückgegeben. |
JSON-Imports | Unterstützt | Benannte oder Standard-Imports aus .json werden unterstützt. |
Modulauflösung
Funktion | Status | Hinweise |
---|---|---|
Pfad-Aliase | Unterstützt | Liest paths und baseUrl aus tsconfig.json , entsprechend dem Next.js-Verhalten. |
Manuelle Aliase | Unterstützt | Konfigurieren Sie resolveAlias in next.config.js (ähnlich wie webpack.resolve.alias ). |
Benutzerdefinierte Erweiterungen | Unterstützt | Konfigurieren Sie resolveExtensions in next.config.js . |
AMD | Teilweise unterstützt | Grundlegende Transformationen funktionieren; fortgeschrittene AMD-Nutzung ist eingeschränkt. |
Leistung und Fast Refresh
Funktion | Status | Hinweise |
---|---|---|
Fast Refresh | Unterstützt | Aktualisiert JavaScript, TypeScript und CSS ohne vollständigen Refresh. |
Inkrementelles Bundling | Unterstützt | Turbopack baut nur das, was vom Dev-Server angefordert wird, was große Apps beschleunigt. |
Nicht unterstützte und nicht geplante Funktionen
Einige Funktionen sind noch nicht implementiert oder nicht geplant:
- Legacy-CSS-Module-Funktionen
- Eigenständige
:local
- und:global
-Pseudo-Klassen (nur die Funktionsvariante:global(...)
wird unterstützt). - Die
@value
-Regel (ersetzt durch CSS-Variablen). :import
- und:export
-ICSS-Regeln.
- Eigenständige
webpack()
-Konfiguration innext.config.js
Turbopack ersetzt webpack, daher werdenwebpack()
-Konfigurationen nicht erkannt. Verwenden Sie stattdessen dieturbopack
-Konfiguration.- AMP Nicht für Turbopack-Unterstützung in Next.js geplant.
- Yarn PnP Nicht für Turbopack-Unterstützung in Next.js geplant.
experimental.urlImports
Nicht für Turbopack geplant.experimental.esmExternals
Nicht geplant. Turbopack unterstützt die Legacy-KonfigurationesmExternals
in Next.js nicht.- Einige Next.js-Experimental-Flags
experimental.typedRoutes
experimental.nextScriptWorkers
experimental.sri.algorithm
experimental.fallbackNodePolyfills
Diese sollen in Zukunft implementiert werden.
Eine vollständige, detaillierte Aufschlüsselung jedes Feature-Flags und seines Status finden Sie in der Turbopack-API-Referenz.
Konfiguration
Turbopack kann über next.config.js
(oder next.config.ts
) unter dem Schlüssel turbopack
konfiguriert werden. Konfigurationsoptionen umfassen:
rules
Definieren Sie zusätzliche Webpack-Loader für Dateitransformationen.resolveAlias
Erstellen Sie manuelle Aliase (wieresolve.alias
in webpack).resolveExtensions
Ändern oder erweitern Sie Dateierweiterungen für die Modulauflösung.moduleIds
Legen Sie fest, wie Modul-IDs generiert werden ('named'
vs.'deterministic'
).treeShaking
Aktivieren oder deaktivieren Sie Tree Shaking in der Entwicklung und zukünftigen Produktions-Builds.memoryLimit
Setzen Sie eine Speicherbegrenzung (in Bytes) für Turbopack.
Weitere detaillierte Konfigurationsbeispiele finden Sie in der Turbopack-Konfigurationsdokumentation.
Erstellung von Trace-Dateien zur Leistungsanalyse
Wenn Sie auf Leistungs- oder Speicherprobleme stoßen und dem Next.js-Team bei der Diagnose helfen möchten, können Sie eine Trace-Datei generieren, indem Sie NEXT_TURBOPACK_TRACING=1
zu Ihrem dev-Befehl hinzufügen:
Dadurch wird eine .next/trace-turbopack
-Datei erstellt. Fügen Sie diese Datei bei der Erstellung eines GitHub-Issues im Next.js-Repo bei, um uns bei der Untersuchung zu helfen.
Zusammenfassung
Turbopack ist ein in Rust geschriebener, inkrementeller Bundler, der entwickelt wurde, um die lokale Entwicklung und Builds schnell zu machen – insbesondere für große Anwendungen. Es ist in Next.js integriert und bietet Zero-Configuration-Unterstützung für CSS, React und TypeScript.
Bleiben Sie dran für weitere Updates, während wir Turbopack weiter verbessern und die Produktions-Build-Unterstützung hinzufügen. Probieren Sie es in der Zwischenzeit mit next dev --turbopack
aus und teilen Sie uns Ihr Feedback mit.
Versionsänderungen
Version | Änderungen |
---|---|
v15.3.0 | Experimentelle Unterstützung für build |
v15.0.0 | Turbopack für dev stabil |