Codemods
Codemods sind Transformationen, die programmgesteuert auf Ihrer Codebasis ausgeführt werden. Dies ermöglicht es, eine große Anzahl von Änderungen programmgesteuert anzuwenden, ohne jede Datei manuell durchgehen zu müssen.
Next.js bietet Codemod-Transformationen, um Ihre Next.js-Codebasis zu aktualisieren, wenn eine API aktualisiert oder als veraltet markiert wird.
Verwendung
Navigieren Sie in Ihrem Terminal in den Projektordner und führen Sie dann aus:
Ersetzen Sie <transform>
und <path>
durch die entsprechenden Werte.
transform
- Name der Transformationpath
- Dateien oder Verzeichnis, die transformiert werden sollen--dry
Führt einen Testlauf durch, es wird kein Code bearbeitet--print
Zeigt die geänderte Ausgabe zum Vergleich an
Codemods
15.0
Transformieren des App Router Route Segment Config runtime
-Wertes von experimental-edge
zu edge
app-dir-runtime-config-experimental-edge
Hinweis: Dieser Codemod ist spezifisch für den App Router.
Dieser Codemod transformiert den Route Segment Config runtime
-Wert experimental-edge
zu edge
.
Beispielsweise:
Wird transformiert zu:
Migration zu asynchronen dynamischen APIs
APIs, die sich für dynamisches Rendering entschieden haben und zuvor synchronen Zugriff unterstützten, sind jetzt asynchron. Weitere Informationen zu dieser Breaking Change finden Sie im Upgrade-Leitfaden.
next-async-request-api
Dieser Codemod transformiert dynamische APIs (cookies()
, headers()
und draftMode()
aus next/headers
), die jetzt asynchron sind, damit sie korrekt abgewartet oder mit React.use()
umschlossen werden.
Wenn eine automatische Migration nicht möglich ist, fügt der Codemod entweder einen Typumwandlung hinzu (bei einer TypeScript-Datei) oder einen Kommentar, um den Benutzer zu informieren, dass eine manuelle Überprüfung und Aktualisierung erforderlich ist.
Beispielsweise:
Wird transformiert zu:
Wenn wir Eigenschaftszugriffe auf die params
- oder searchParams
-Eigenschaften in den Seiten-/Routeneinträgen (page.js
, layout.js
, route.js
oder default.js
) oder den generateMetadata
- / generateViewport
-APIs erkennen, wird versucht, den Aufrufungsort von einer synchronen zu einer asynchronen Funktion zu transformieren und den Eigenschaftszugriff abzuwarten. Wenn es nicht asynchron gemacht werden kann (z.B. bei einer Client-Komponente), wird React.use
verwendet, um das Promise zu entpacken.
Beispielsweise:
Wird transformiert zu:
Hinweis: Wenn dieser Codemod eine Stelle identifiziert, die möglicherweise manuelle Eingriffe erfordert, aber wir nicht in der Lage sind, die genaue Lösung zu bestimmen, wird er einen Kommentar oder eine Typumwandlung zum Code hinzufügen, um den Benutzer zu informieren, dass eine manuelle Aktualisierung erforderlich ist. Diese Kommentare beginnen mit @next/codemod, und Typumwandlungen sind mit
UnsafeUnwrapped
gekennzeichnet. Der Build wird fehlschlagen, bis diese Kommentare explizit entfernt werden. Weitere Informationen.
Ersetzen der geo
- und ip
-Eigenschaften von NextRequest
mit @vercel/functions
next-request-geo-ip
Dieser Codemod installiert @vercel/functions
und transformiert die geo
- und ip
-Eigenschaften von NextRequest
mit entsprechenden @vercel/functions
-Funktionen.
Beispielsweise:
Wird transformiert zu:
14.0
Migration der ImageResponse
-Importe
next-og-import
Dieser Codemod transformiert Importe von next/server
zu next/og
für die Verwendung der Dynamischen OG-Bildgenerierung.
Beispielsweise:
Wird transformiert zu:
Verwendung des viewport
-Exports
metadata-to-viewport-export
Dieser Codemod migriert bestimmte Viewport-Metadaten zum viewport
-Export.
Beispielsweise:
Wird transformiert zu:
13.2
Verwendung der integrierten Schriftart
built-in-next-font
Dieser Codemod deinstalliert das @next/font
-Paket und transformiert @next/font
-Importe in die integrierte next/font
.
Beispielsweise:
Wird transformiert zu:
13.0
Umbenennen der Next Image-Importe
next-image-to-legacy-image
Benennt next/image
-Importe in bestehenden Next.js 10-, 11- oder 12-Anwendungen sicher zu next/legacy/image
in Next.js 13 um. Benennt auch next/future/image
zu next/image
um.
Beispielsweise:
Wird transformiert zu:
Migration zur neuen Image-Komponente
next-image-experimental
Migriert gefährlich von next/legacy/image
zur neuen next/image
, indem Inline-Stile hinzugefügt und nicht verwendete Eigenschaften entfernt werden.
- Entfernt die
layout
-Eigenschaft und fügtstyle
hinzu. - Entfernt die
objectFit
-Eigenschaft und fügtstyle
hinzu. - Entfernt die
objectPosition
-Eigenschaft und fügtstyle
hinzu. - Entfernt die
lazyBoundary
-Eigenschaft. - Entfernt die
lazyRoot
-Eigenschaft.
Entfernen von <a>
-Tags aus Link-Komponenten
new-link
Entfernen Sie <a>
-Tags innerhalb von Link-Komponenten oder fügen Sie eine legacyBehavior
-Eigenschaft zu Links hinzu, die nicht automatisch korrigiert werden können.
Beispielsweise:
In Fällen, in denen keine automatische Korrektur möglich ist, wird die legacyBehavior
-Eigenschaft hinzugefügt. Dies ermöglicht es Ihrer App, für diesen speziellen Link weiterhin das alte Verhalten zu verwenden.
11
Migration von CRA
cra-to-next
Migriert ein Create React App-Projekt zu Next.js; erstellt einen Pages Router und die notwendige Konfiguration, um das Verhalten zu übereinstimmen. Die serverseitige Rendering wird zunächst nur clientseitig genutzt, um die Kompatibilität aufgrund von window
-Nutzung während des SSR zu verhindern und kann nahtlos aktiviert werden, um die schrittweise Einführung von Next.js-spezifischen Funktionen zu ermöglichen.
Bitte teilen Sie Ihr Feedback zu dieser Transformation in dieser Diskussion mit.
10
React-Imports hinzufügen
add-missing-react-import
Transformiert Dateien, die React
nicht importieren, um den Import hinzuzufügen, damit die neue React JSX-Transformation funktioniert.
Beispielsweise:
Wird umgewandelt in:
9
Anonyme Komponenten in benannte Komponenten transformieren
name-default-component
Versionen 9 und höher.
Transformiert anonyme Komponenten in benannte Komponenten, um sicherzustellen, dass sie mit Fast Refresh funktionieren.
Beispielsweise:
Wird umgewandelt in:
Die Komponente erhält einen kamelgroßen Namen basierend auf dem Dateinamen und funktioniert auch mit Pfeilfunktionen.
8
AMP HOC in Seitenkonfiguration transformieren
withamp-to-config
Transformiert das withAmp
HOC in die Next.js 9 Seitenkonfiguration.
Beispielsweise:
6
Verwenden von withRouter
url-to-withrouter
Transformiert die veraltete, automatisch injizierte url
-Eigenschaft auf Seiten der obersten Ebene zur Verwendung von withRouter
und der Router-Eigenschaft, die es injiziert. Weitere Informationen hier: https://nextjs.org/docs/messages/url-deprecated
Beispielsweise:
Dies ist ein Fall. Alle Fälle, die transformiert (und getestet) werden, können im __testfixtures__
-Verzeichnis gefunden werden.