Next.js Compiler
Der Next.js Compiler, in Rust mit SWC geschrieben, ermöglicht es Next.js, Ihren JavaScript-Code für die Produktion zu transformieren und zu minimieren. Dies ersetzt Babel für einzelne Dateien und Terser für die Minimierung von Ausgabe-Bundles.
Die Kompilierung mit dem Next.js Compiler ist 17-mal schneller als Babel und standardmäßig seit Next.js Version 12 aktiviert. Wenn Sie eine bestehende Babel-Konfiguration haben oder nicht unterstützte Funktionen verwenden, wird Ihre Anwendung vom Next.js Compiler ausgenommen und verwendet weiterhin Babel.
Warum SWC?
SWC ist eine erweiterbare, auf Rust basierende Plattform für die nächste Generation von schnellen Entwickler-Tools.
SWC kann für Kompilierung, Minimierung, Bundling und mehr verwendet werden – und ist darauf ausgelegt, erweitert zu werden. Es ist etwas, das man aufrufen kann, um Codetransformationen durchzuführen (entweder integriert oder benutzerdefiniert). Die Ausführung dieser Transformationen erfolgt über übergeordnete Tools wie Next.js.
Wir haben uns aus mehreren Gründen für SWC entschieden:
- Erweiterbarkeit: SWC kann als Crate innerhalb von Next.js verwendet werden, ohne die Bibliothek forken oder Designbeschränkungen umgehen zu müssen.
- Leistung: Wir konnten Fast Refresh ~3-mal schneller und Builds ~5-mal schneller machen, indem wir zu SWC gewechselt haben, mit noch Raum für weitere Optimierungen.
- WebAssembly: Die Unterstützung von WebAssembly durch Rust ist entscheidend, um alle möglichen Plattformen zu unterstützen und Next.js-Entwicklung überall zu ermöglichen.
- Community: Die Rust-Community und das Ökosystem sind hervorragend und wachsen weiter.
Unterstützte Funktionen
Styled Components
Wir arbeiten daran, babel-plugin-styled-components
zum Next.js Compiler zu portieren.
Aktualisieren Sie zunächst auf die neueste Version von Next.js: npm install next@latest
. Aktualisieren Sie dann Ihre next.config.js
-Datei:
Für fortgeschrittene Anwendungsfälle können Sie einzelne Eigenschaften für die Styled-Components-Kompilierung konfigurieren.
Hinweis:
ssr
unddisplayName
Transformationen sind die Hauptanforderung für die Verwendung vonstyled-components
in Next.js.
Jest
Der Next.js Compiler kompiliert Ihre Tests und vereinfacht die Konfiguration von Jest zusammen mit Next.js, einschließlich:
- Automatisches Mocken von
.css
,.module.css
(und deren.scss
-Varianten) und Bilderimporten - Automatische Einrichtung von
transform
mit SWC - Laden von
.env
(und allen Varianten) inprocess.env
- Ignorieren von
node_modules
beim Test-Resolving und bei Transformationen - Ignorieren von
.next
beim Test-Resolving - Laden von
next.config.js
für Flags, die experimentelle SWC-Transformationen aktivieren
Aktualisieren Sie zunächst auf die neueste Version von Next.js: npm install next@latest
. Aktualisieren Sie dann Ihre jest.config.js
-Datei:
Relay
So aktivieren Sie Relay-Unterstützung:
Hinweis: In Next.js werden alle JavaScript-Dateien im
pages
-Verzeichnis als Routen betrachtet. Daher müssen Sie fürrelay-compiler
dieartifactDirectory
-Konfigurationseinstellungen außerhalb vonpages
angeben, da sonstrelay-compiler
Dateien neben der Quelldatei im__generated__
-Verzeichnis generiert, und diese Datei als Route betrachtet wird, was Produktions-Builds unterbrechen würde.
React-Eigenschaften entfernen
Ermöglicht das Entfernen von JSX-Eigenschaften. Dies wird oft zum Testen verwendet. Ähnlich wie babel-plugin-react-remove-properties
.
So entfernen Sie Eigenschaften, die dem Standard-Regex ^data-test
entsprechen:
So entfernen Sie benutzerdefinierte Eigenschaften:
Console entfernen
Diese Transformation ermöglicht das Entfernen aller console.*
-Aufrufe im Anwendungscode (nicht in node_modules
). Ähnlich wie babel-plugin-transform-remove-console
.
Alle console.*
-Aufrufe entfernen:
console.*
-Ausgabe außer console.error
entfernen:
Legacy Decorators
Next.js erkennt automatisch experimentalDecorators
in jsconfig.json
oder tsconfig.json
. Legacy Decorators werden häufig mit älteren Versionen von Bibliotheken wie mobx
verwendet.
Dieses Flag wird nur zur Kompatibilität mit bestehenden Anwendungen unterstützt. Wir empfehlen nicht, Legacy Decorators in neuen Anwendungen zu verwenden.
Aktualisieren Sie zunächst auf die neueste Version von Next.js: npm install next@latest
. Aktualisieren Sie dann Ihre jsconfig.json
oder tsconfig.json
-Datei:
importSource
Next.js erkennt automatisch jsxImportSource
in jsconfig.json
oder tsconfig.json
und wendet es an. Dies wird häufig mit Bibliotheken wie Theme UI verwendet.
Aktualisieren Sie zunächst auf die neueste Version von Next.js: npm install next@latest
. Aktualisieren Sie dann Ihre jsconfig.json
oder tsconfig.json
-Datei:
Emotion
Wir arbeiten daran, @emotion/babel-plugin
zum Next.js Compiler zu portieren.
Aktualisieren Sie zunächst auf die neueste Version von Next.js: npm install next@latest
. Aktualisieren Sie dann Ihre next.config.js
-Datei:
Minifikation
Next.js' SWC-Compiler wird seit Version 13 standardmäßig für die Minifikation verwendet. Dies ist 7-mal schneller als Terser.
Falls Terser aus irgendeinem Grund weiterhin benötigt wird, kann dies konfiguriert werden.
Modul-Transpilation
Next.js kann Abhängigkeiten automatisch aus lokalen Paketen (wie Monorepos) oder externen Abhängigkeiten (node_modules
) transpilieren und bündeln. Dies ersetzt das next-transpile-modules
-Paket.
Importierung modularisieren
Diese Option wurde in Next.js 13.5 durch optimizePackageImports
ersetzt. Wir empfehlen ein Upgrade zur Nutzung der neuen Option, die keine manuelle Konfiguration von Import-Pfaden erfordert.
Experimentelle Funktionen
SWC-Trace-Profiling
Sie können SWCs interne Transformations-Traces im Chromium-Trace-Ereignisformat generieren.
Sobald aktiviert, wird SWC eine Trace-Datei mit dem Namen swc-trace-profile-${timestamp}.json
im .next/
-Verzeichnis generieren. Chromiums Trace-Viewer (chrome://tracing/, https://ui.perfetto.dev/) oder kompatible Flamegraph-Viewer (https://www.speedscope.app/) können die generierten Traces laden und visualisieren.
SWC-Plugins (experimentell)
Sie können SWCs Transformation so konfigurieren, dass die experimentelle Plugin-Unterstützung in WebAssembly verwendet wird, um das Transformationsverhalten anzupassen.
swcPlugins
akzeptiert ein Array von Tupeln zur Plugin-Konfiguration. Ein Tupel für das Plugin enthält den Pfad zum Plugin und ein Konfigurationsobjekt. Der Pfad zum Plugin kann ein npm-Modulpaketname oder ein absoluter Pfad zur .wasm
-Binärdatei selbst sein.
Nicht unterstützte Funktionen
Wenn Ihre Anwendung eine .babelrc
-Datei hat, wird Next.js automatisch auf Babel zurückgreifen, um einzelne Dateien zu transformieren. Dies gewährleistet die Abwärtskompatibilität mit bestehenden Anwendungen, die benutzerdefinierte Babel-Plugins nutzen.
Wenn Sie eine benutzerdefinierte Babel-Konfiguration verwenden, teilen Sie bitte Ihre Konfiguration mit. Wir arbeiten daran, so viele häufig verwendete Babel-Transformationen wie möglich zu portieren und Plugins in Zukunft zu unterstützen.
Versionshistorie
Version | Änderungen |
---|---|
v13.1.0 | Modul-Transpilation und Modularisierte Imports stabil. |
v13.0.0 | SWC-Minifizierer standardmäßig aktiviert. |
v12.3.0 | SWC-Minifizierer stabil. |
v12.2.0 | Experimentelle Unterstützung für SWC-Plugins hinzugefügt. |
v12.1.0 | Unterstützung für Styled Components, Jest, Relay, Entfernen von React-Eigenschaften, Legacy-Decorators, Entfernen von Konsole und jsxImportSource hinzugefügt. |
v12.0.0 | Next.js Compiler eingeführt. |