Codemods
Codemods sind Transformationen, die programmatisch auf Ihrer Codebasis ausgeführt werden. Dadurch können zahlreiche Änderungen automatisch angewendet werden, ohne jede Datei manuell durchgehen zu müssen.
Next.js stellt Codemod-Transformationen bereit, um Ihre Next.js-Codebasis bei API-Updates oder -Veraltungen zu aktualisieren.
Verwendung
Navigieren Sie im Terminal (cd) in den Projektordner und führen Sie dann aus:
npx @next/codemod <transform> <pfad>Ersetzen Sie <transform> und <pfad> mit den entsprechenden Werten.
transform- Name der Transformationpfad- Dateien oder Verzeichnis zu transformieren--dryTrockenlauf, kein Code wird bearbeitet--printGibt die geänderten Ausgaben zum Vergleich aus
Next.js Codemods
13.2
Integrierte Schriftarten verwenden
built-in-next-font
npx @next/codemod@latest built-in-next-font .Dieser Codemod deinstalliert das @next/font-Paket und wandelt @next/font-Imports in die integrierte next/font um.
Beispiel:
import { Inter } from '@next/font/google'Wird transformiert in:
import { Inter } from 'next/font/google'13.0
Next Image Imports umbenennen
next-image-to-legacy-image
npx @next/codemod@latest next-image-to-legacy-image .Benennt sicher next/image-Imports in bestehenden Next.js 10, 11 oder 12 Anwendungen in next/legacy/image für Next.js 13 um. Benennt auch next/future/image in next/image um.
Beispiel:
import Image1 from 'next/image'
import Image2 from 'next/future/image'
export default function Home() {
return (
<div>
<Image1 src="/test.jpg" width="200" height="300" />
<Image2 src="/test.png" width="500" height="400" />
</div>
)
}Wird transformiert in:
// 'next/image' wird zu 'next/legacy/image'
import Image1 from 'next/legacy/image'
// 'next/future/image' wird zu 'next/image'
import Image2 from 'next/image'
export default function Home() {
return (
<div>
<Image1 src="/test.jpg" width="200" height="300" />
<Image2 src="/test.png" width="500" height="400" />
</div>
)
}Migration zur neuen Image-Komponente
next-image-experimental
npx @next/codemod@latest next-image-experimental .Migriert gefährlich von next/legacy/image zur neuen next/image durch Hinzufügen von Inline-Styles und Entfernen ungenutzter Props.
- Entfernt
layout-Prop und fügtstylehinzu. - Entfernt
objectFit-Prop und fügtstylehinzu. - Entfernt
objectPosition-Prop und fügtstylehinzu. - Entfernt
lazyBoundary-Prop. - Entfernt
lazyRoot-Prop.
<a>-Tags aus Link-Komponenten entfernen
new-link
npx @next/codemod@latest new-link .Entfernt <a>-Tags innerhalb von Link-Komponenten oder fügt ein legacyBehavior-Prop zu Links hinzu, die nicht automatisch behoben werden können.
Beispiel:
<Link href="/about">
<a>Über uns</a>
</Link>
// wird zu
<Link href="/about">
Über uns
</Link>
<Link href="/about">
<a onClick={() => console.log('geklickt')}>Über uns</a>
</Link>
// wird zu
<Link href="/about" onClick={() => console.log('geklickt')}>
Über uns
</Link>In Fällen, wo automatische Korrekturen nicht angewendet werden können, wird das legacyBehavior-Prop hinzugefügt. Dies ermöglicht Ihrer App, das alte Verhalten für diesen spezifischen Link beizubehalten.
const Component = () => <a>Über uns</a>
<Link href="/about">
<Component />
</Link>
// wird zu
<Link href="/about" legacyBehavior>
<Component />
</Link>11
Migration von CRA
cra-to-next
npx @next/codemod cra-to-nextMigriert ein Create React App-Projekt zu Next.js; erstellt einen Pages Router und notwendige Konfiguration, um das Verhalten abzubilden. Client-seitiges Rendering wird zunächst genutzt, um Inkompatibilitäten durch window-Verwendung während SSR zu vermeiden und kann nahtlos aktiviert werden, um die schrittweise Übernahme von Next.js-spezifischen Features zu ermöglichen.
Bitte teilen Sie Feedback zu dieser Transformation in dieser Diskussion.
10
React-Imports hinzufügen
add-missing-react-import
npx @next/codemod add-missing-react-importTransformiert Dateien, die React nicht importieren, um den Import einzufügen, damit die neue React JSX-Transformation funktioniert.
Beispiel:
export default class Home extends React.Component {
render() {
return <div>Hello World</div>
}
}Wird transformiert in:
import React from 'react'
export default class Home extends React.Component {
render() {
return <div>Hello World</div>
}
}9
Anonyme Komponenten in benannte Komponenten transformieren
name-default-component
npx @next/codemod name-default-componentVersionen 9 und höher.
Transformiert anonyme Komponenten in benannte Komponenten, um sicherzustellen, dass sie mit Fast Refresh funktionieren.
Beispiel:
export default function () {
return <div>Hello World</div>
}Wird transformiert in:
export default function MyComponent() {
return <div>Hello World</div>
}Die Komponente erhält einen camelCase-Namen basierend auf dem Dateinamen und funktioniert auch mit Pfeilfunktionen.
8
AMP HOC in Seitenkonfiguration transformieren
withamp-to-config
npx @next/codemod withamp-to-configTransformiert die withAmp HOC in die Next.js 9 Seitenkonfiguration.
Beispiel:
// Vorher
import { withAmp } from 'next/amp'
function Home() {
return <h1>Meine AMP-Seite</h1>
}
export default withAmp(Home)// Nachher
export default function Home() {
return <h1>Meine AMP-Seite</h1>
}
export const config = {
amp: true,
}6
withRouter verwenden
url-to-withrouter
npx @next/codemod url-to-withrouterTransformiert die veraltete, automatisch injizierte url-Eigenschaft auf Top-Level-Seiten zur Verwendung von withRouter und der injizierten router-Eigenschaft. Mehr dazu hier: https://nextjs.org/docs/messages/url-deprecated
Beispiel:
import React from 'react'
export default class extends React.Component {
render() {
const { pathname } = this.props.url
return <div>Aktueller Pfadname: {pathname}</div>
}
}import React from 'react'
import { withRouter } from 'next/router'
export default withRouter(
class extends React.Component {
render() {
const { pathname } = this.props.router
return <div>Aktueller Pfadname: {pathname}</div>
}
}
)Dies ist ein Fall. Alle transformierten (und getesteten) Fälle finden Sie im __testfixtures__-Verzeichnis.