Version 12

Um auf Version 12 zu aktualisieren, führen Sie den folgenden Befehl aus:

Terminal
npm i next@12 react@17 react-dom@17 eslint-config-next@12
Terminal
yarn add next@12 react@17 react-dom@17 eslint-config-next@12
Terminal
pnpm up next@12 react@17 react-dom@17 eslint-config-next@12
Terminal
bun add next@12 react@17 react-dom@17 eslint-config-next@12

Gut zu wissen: Wenn Sie TypeScript verwenden, stellen Sie sicher, dass Sie auch @types/react und @types/react-dom auf die entsprechenden Versionen aktualisieren.

Aktualisierung auf 12.2

Middleware - Wenn Sie Middleware vor 12.2 verwendet haben, lesen Sie bitte den Aktualisierungsleitfaden für weitere Informationen.

Aktualisierung auf 12.0

Minimale Node.js-Version - Die minimale Node.js-Version wurde von 12.0.0 auf 12.22.0 erhöht, was die erste Version von Node.js mit nativer Unterstützung für ES-Module ist.

Minimale React-Version - Die mindestens erforderliche React-Version ist 17.0.2. Um zu aktualisieren, können Sie den folgenden Befehl im Terminal ausführen:

Terminal
npm install react@latest react-dom@latest

yarn add react@latest react-dom@latest

pnpm update react@latest react-dom@latest

bun add react@latest react-dom@latest

SWC ersetzt Babel

Next.js verwendet jetzt den Rust-basierten Compiler SWC zur Kompilierung von JavaScript/TypeScript. Dieser neue Compiler ist bis zu 17x schneller als Babel bei der Kompilierung einzelner Dateien und bis zu 5x schneller bei Fast Refresh.

Next.js bietet vollständige Abwärtskompatibilität mit Anwendungen, die eine benutzerdefinierte Babel-Konfiguration haben. Alle Transformationen, die Next.js standardmäßig handhabt, wie styled-jsx und Tree-Shaking von getStaticProps / getStaticPaths / getServerSideProps, wurden nach Rust portiert.

Wenn eine Anwendung eine benutzerdefinierte Babel-Konfiguration hat, wird Next.js automatisch die Verwendung von SWC für die Kompilierung von JavaScript/TypeScript deaktivieren und stattdessen auf Babel zurückgreifen, genau wie in Next.js 11.

Viele der Integrationen mit externen Bibliotheken, die derzeit benutzerdefinierte Babel-Transformationen erfordern, werden in naher Zukunft auf Rust-basierte SWC-Transformationen portiert. Dazu gehören unter anderem:

  • Styled Components
  • Emotion
  • Relay

Um Transformationen zu priorisieren, die Ihnen bei der Übernahme von SWC helfen, teilen Sie bitte Ihre .babelrc in diesem Feedback-Thread mit.

SWC ersetzt Terser für die Minifizierung

Sie können die Ersetzung von Terser durch SWC für die bis zu 7x schnellere Minifizierung von JavaScript über eine Flag in next.config.js aktivieren:

next.config.js
module.exports = {
  swcMinify: true,
}

Die Minifizierung mit SWC ist ein optionales Flag, um sicherzustellen, dass sie gegen mehr reale Next.js-Anwendungen getestet werden kann, bevor sie in Next.js 12.1 standardmäßig aktiviert wird. Wenn Sie Feedback zur Minifizierung haben, hinterlassen Sie es bitte in diesem Feedback-Thread.

Verbesserungen beim Parsing von styled-jsx CSS

Zusätzlich zum Rust-basierten Compiler haben wir einen neuen CSS-Parser implementiert, der auf dem für die styled-jsx-Babel-Transformation verwendeten basiert. Dieser neue Parser hat eine verbesserte Handhabung von CSS und wirft jetzt Fehler, wenn ungültiges CSS verwendet wird, das früher durchgeschlüpft ist und unerwartetes Verhalten verursacht hat.

Aufgrund dieser Änderung wird ungültiges CSS während der Entwicklung und bei next build einen Fehler verursachen. Diese Änderung betrifft nur die Verwendung von styled-jsx.

next/image ändert umschließendes Element

next/image rendert jetzt das <img>-Element innerhalb eines <span> anstelle eines <div>.

Wenn Ihre Anwendung spezifisches CSS hat, das span-Elemente wie .container span anspricht, könnte das Upgrade auf Next.js 12 fälschlicherweise das umschließende Element innerhalb der <Image>-Komponente ansprechen. Sie können dies vermeiden, indem Sie den Selektor auf eine bestimmte Klasse wie .container span.item beschränken und die relevante Komponente mit dieser className aktualisieren, z.B. <span className="item" />.

Wenn Ihre Anwendung spezifisches CSS hat, das das <div>-Tag von next/image anspricht, z.B. .container div, könnte es nicht mehr funktionieren. Sie können den Selektor auf .container span aktualisieren oder vorzugsweise ein neues <div className="wrapper"> um die <Image>-Komponente legen und dieses ansprechen, z.B. .container .wrapper.

Die className-Prop bleibt unverändert und wird weiterhin an das zugrunde liegende <img>-Element übergeben.

Weitere Informationen finden Sie in der Dokumentation.

HMR-Verbindung verwendet jetzt WebSocket

Bisher hat Next.js eine Server-Sent Events-Verbindung für HMR-Ereignisse verwendet. Next.js 12 verwendet jetzt eine WebSocket-Verbindung.

In einigen Fällen, wenn Sie Anfragen an den Next.js-Entwicklungsserver weiterleiten, müssen Sie sicherstellen, dass die Upgrade-Anfrage korrekt behandelt wird. Zum Beispiel müssen Sie in nginx die folgende Konfiguration hinzufügen:

location /_next/webpack-hmr {
    proxy_pass http://localhost:3000/_next/webpack-hmr;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

Wenn Sie Apache (2.x) verwenden, können Sie die folgende Konfiguration hinzufügen, um WebSockets auf dem Server zu aktivieren. Überprüfen Sie den Port, den Hostnamen und die Servernamen.

<VirtualHost *:443>
 # ServerName yourwebsite.local
 ServerName "${WEBSITE_SERVER_NAME}"
 ProxyPass / http://localhost:3000/
 ProxyPassReverse / http://localhost:3000/
 # Next.js 12 verwendet WebSocket
 <Location /_next/webpack-hmr>
    RewriteEngine On
    RewriteCond %{QUERY_STRING} transport=websocket [NC]
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteCond %{HTTP:Connection} upgrade [NC]
    RewriteRule /(.*) ws://localhost:3000/_next/webpack-hmr/$1 [P,L]
    ProxyPass ws://localhost:3000/_next/webpack-hmr retry=0 timeout=30
    ProxyPassReverse ws://localhost:3000/_next/webpack-hmr
 </Location>
</VirtualHost>

Für benutzerdefinierte Server, wie z.B. express, müssen Sie möglicherweise app.all verwenden, um sicherzustellen, dass die Anfrage korrekt weitergeleitet wird, zum Beispiel:

app.all('/_next/webpack-hmr', (req, res) => {
  nextjsRequestHandler(req, res)
})

Webpack 4-Unterstützung wurde entfernt

Wenn Sie bereits webpack 5 verwenden, können Sie diesen Abschnitt überspringen.

Next.js hat webpack 5 als Standard für die Kompilierung in Next.js 11 übernommen. Wie in der Dokumentation zur Aktualisierung auf webpack 5 mitgeteilt, entfernt Next.js 12 die Unterstützung für webpack 4.

Wenn Ihre Anwendung immer noch webpack 4 mit dem Opt-out-Flag verwendet, erhalten Sie jetzt eine Fehlermeldung, die auf die Dokumentation zur Aktualisierung auf webpack 5 verweist.

target-Option ist veraltet

Wenn Sie target nicht in next.config.js haben, können Sie diesen Abschnitt überspringen.

Die target-Option wurde zugunsten der integrierten Unterstützung für das Tracing der für die Ausführung einer Seite benötigten Abhängigkeiten als veraltet markiert.

Während next build wird Next.js automatisch jede Seite und ihre Abhängigkeiten nachverfolgen, um alle Dateien zu bestimmen, die für die Bereitstellung einer Produktionsversion Ihrer Anwendung benötigt werden.

Wenn Sie derzeit die target-Option auf serverless gesetzt haben, lesen Sie bitte die Dokumentation zur Nutzung der neuen Output-Option.