BackZurück zum Blog

Next.js 11

Next.js 11 setzt unsere Mission fort, die beste Developer Experience mit einem neuen Konformitätssystem und Leistungsverbesserungen zu bieten.

Wie wir auf der Next.js Conf angekündigt haben, setzen wir unsere Mission für die beste Developer Experience mit Next.js 11 fort, die folgende Features bietet:

  • Konformität: Ein System, das sorgfältig entwickelte Lösungen für optimale UX bereitstellt.
  • Verbesserte Leistung: Weitere Optimierungen, um die Kaltstartzeit zu verbessern, sodass Sie schneller mit der Entwicklung beginnen können.
  • next/script: Automatische Priorisierung des Ladens von Drittanbieter-Skripten zur Leistungsverbesserung.
  • next/image: Reduzierung von Layout-Shifts und eine flüssigere visuelle Erfahrung mit automatischer Größenermittlung und Unterstützung für Blur-Up-Platzhalter.
  • Webpack 5: Jetzt standardmäßig für alle Next.js-Anwendungen aktiviert, was diese Vorteile allen Next.js-Entwicklern bringt.
  • Create React App Migration (Experimentell): Automatische Konvertierung von Create React App in eine Next.js-kompatible Anwendung.
  • Next.js Live (Preview Release): Code im Browser, mit Ihrem Team, in Echtzeit.

Aktualisieren Sie heute durch Ausführen von npm i next@latest react@latest react-dom@latest und lesen Sie die Migrationsanleitung unten.

Konformität

Selbst mit großartigen Tools und automatischen Optimierungen in Frameworks werden Seitenbetreiber und App-Entwickler oft aufgefordert, Experten in UX-Qualitätsthemen wie Leistung, Sicherheit und Barrierefreiheit zu werden. Wenn Features hinzugefügt werden und Teams wachsen, müssen Entwickler anders denken.

Durch ihre Arbeit an groß angelegten Webanwendungen wie Search und Maps hat Google bewiesen, dass Frameworks eine entscheidende Rolle bei der Aufrechterhaltung der Qualität spielen können, wenn Teams und Anwendungen skalieren. Durch ein System starker Standardeinstellungen und Sicherheitsvorkehrungen ermöglichen sie Entwicklern, sich mehr auf Features und Produkte zu konzentrieren.

Heute hat Googles Web Platforms Team begonnen, ihr System mit Konformität für Next.js zu open-sourcen.

Konformität ist ein System, das sorgfältig entwickelte Lösungen und Regeln bereitstellt, um optimales Laden und Core Web Vitals zu unterstützen, mit weiteren Ergänzungen für andere Qualitätsaspekte wie Sicherheit und Barrierefreiheit. Diese Lösungen befreien Ihr Team davon, sich alle neuesten Regeln für optimale Ladeleistung zu merken, während Sie dennoch die Flexibilität haben, die richtigen Entscheidungen für Ihre Anwendungen zu treffen.

Neben vielen grundlegenden Optimierungen, die auf Leistungsforschung basieren, unterstützt Next.js 11 jetzt ESLint out-of-the-box, um das Erkennen von Framework-spezifischen Problemen während der Entwicklung zu erleichtern und Richtlinien für Ihr Team festzulegen, um Best Practices auch beim Skalieren sicherzustellen.

Um mit ESLint zu beginnen, führen Sie npx next lint nach dem Upgrade auf Next.js 11 aus. Die ESLint-Integration funktioniert für neue und bestehende Next.js-Anwendungen und bietet einen neuen Satz von Regeln, um Entwicklern beim Erstellen besserer Anwendungen zu helfen.

Terminal
$ npx next lint
Wir haben die .eslintrc-Datei für Sie erstellt und die grundlegende Next.js ESLint-Konfiguration eingefügt.
 
./pages/about.js
7:9  Warnung: Stylesheets sollten nicht manuell eingebunden werden. Siehe: https://nextjs.org/docs/messages/no-css-tags.  @next/next/no-css-tags
10:7  Warnung: Externe synchrone Skripte sind verboten. Siehe: https://nextjs.org/docs/messages/no-sync-scripts.  @next/next/no-sync-scripts
 
./pages/index.js
4:10  Warnung: Verwenden Sie nicht das HTML <a>-Tag, um zu /about/ zu navigieren. Verwenden Sie stattdessen Link von 'next/link'. Siehe: https://nextjs.org/docs/messages/no-html-link-for-pages.  @next/next/no-html-link-for-pages
 
Müssen Sie einige ESLint-Regeln deaktivieren? Erfahren Sie hier mehr: https://nextjs.org/docs/pages/building-your-application/configuring/eslint#disabling-rules
 
  Fertig in 1.94s.

Erfahren Sie mehr über Konformität für Frameworks auf Googles Blog.

Verbesserte Leistung

Seit Next.js 10 sind wir besessen davon, die Developer Experience von Next.js weiter zu verbessern. In 10.1 und 10.2 haben wir die Startzeit um bis zu 24% verbessert und weitere 40% der Verarbeitungszeit für Änderungen durch React Fast Refresh eingespart. Sie erhalten diese erstaunlichen Geschwindigkeitsverbesserungen einfach durch das Aktualisieren von Next.js.

Next.js 11 enthält eine weitere Optimierung für Babel, um die Startzeit weiter zu reduzieren. Wir haben eine brandneue Implementierung des Babel-Loaders für webpack erstellt, der das Laden optimiert und eine In-Memory-Konfigurations-Caching-Schicht hinzufügt. In der Praxis bedeutet dies keine Änderung für Entwickler, aber letztendlich eine schnellere Entwicklungserfahrung.

Skript-Optimierung

Die neue Next.js Script-Komponente ist eine grundlegende Optimierung, die Entwicklern ermöglicht, die Lade-Priorität von Drittanbieter-Skripten festzulegen, um Entwicklerzeit zu sparen und die Ladeleistung zu verbessern.

Websites benötigen oft Drittanbieter für Dinge wie Analysen, Anzeigen, Kundensupport-Widgets und Consent-Management. Diese Skripte belasten jedoch oft die Ladeleistung und können die Benutzererfahrung beeinträchtigen. Entwickler kämpfen oft damit, sie an der optimalen Stelle in einer Anwendung zu platzieren.

Mit next/script können Sie die strategy-Eigenschaft definieren, und Next.js priorisiert sie automatisch, um die Ladeleistung zu verbessern:

  • beforeInteractive: Für kritische Skripte, die vor der Interaktivität der Seite geladen und ausgeführt werden müssen, wie Bot-Erkennung und Consent-Management. Diese Skripte werden in das initiale HTML vom Server eingefügt und laufen, bevor selbst gebündelter JavaScript-Code ausgeführt wird.
  • afterInteractive (Standard): Für Skripte, die nach der Interaktivität der Seite geladen und ausgeführt werden können, wie Tag-Manager und Analysen. Diese Skripte werden clientseitig eingefügt und laufen nach der Hydration.
  • lazyOnload: Für Skripte, die während der Leerlaufzeit geladen werden können, wie Chat-Support und Social-Media-Widgets.
<Script
  src={url}
  strategy="beforeInteractive" // lazyOnload, afterInteractive
/>

Sie können auch Code nach dem Laden ausführen. Beispielsweise können Sie warten, bis ein Benutzer eine Zustimmung gegeben hat:

<Script
  src={url} // Consent-Management
  strategy="beforeInteractive"
  onLoad={() => {
    // Wenn erfolgreich geladen, können Sie andere Skripte sequenziell laden
  }}
/>

Wir haben auch das standardmäßige Skript-Ladeverhalten in Next.js 11 von Preloading und async auf defer geändert. Drittanbieter-Skripte konkurrieren oft mit höher priorisierten Ressourcen wie CSS, Schriftarten und Bildern. Die Beibehaltung der richtigen Reihenfolge im Verhältnis zu diesen Ressourcen sowie anderen Skripten ist eine unangemessene Belastung für Entwickler.

Durch die Bereitstellung einer Script-Komponente mit einer Standard-Ladestrategie von afterInteractive haben Entwickler jetzt bessere Standardeinstellungen für optimale Leistung, mit der Möglichkeit, bei Bedarf beforeInteractive zu wählen.

Um mehr über die technischen Entscheidungen hinter dieser Änderung zu erfahren, lesen Sie das RFC und die Herausforderungen mit Preload vom Google Chrome-Team.

Bildverbesserungen

Wir freuen uns, zwei der am häufigsten nachgefragten Features der Community für die next/image-Komponente vorzustellen: Reduzierung von Cumulative Layout Shift und eine flüssigere visuelle Erfahrung.

Automatische Größenermittlung (Lokale Bilder)

Verwenden Sie das import-Schlüsselwort für die Bild-src, um automatisch width und height für statische Bilder zu definieren.

Beispielsweise ist die Verwendung der integrierten Image-Komponente jetzt noch einfacher:

pages/index.js
import Image from 'next/image';
import author from '../public/me.png';
 
export default function Home() {
  return (
    // Wenn das Bild als Quelle importiert wird, müssen Sie
    // `width` und `height` nicht definieren.
    <Image src={author} alt="Bild des Autors" />
  );
}

Bildplatzhalter

next/image unterstützt jetzt Blur-Up-Platzhalter, um den Übergang vom leeren Raum zum Bild zu erleichtern und die wahrgenommene Ladezeit zu reduzieren, insbesondere für Benutzer mit langsamer Internetverbindung.

Um verschwommene Platzhalter zu verwenden, fügen Sie placeholder="blur" zu Ihrem Bild hinzu.

<Image src={author} alt="Bild des Autors" placeholder="blur" />

Next.js unterstützt auch das Verschleiern dynamischer Bilder, indem Sie eine benutzerdefinierte blurDataURL bereitstellen können, die von Ihrem Backend stammt. Beispielsweise können Sie einen blurha.sh auf dem Server generieren.

<Image
  src="https://nextjs.org/static/blog/next-11/learn.png"
  blurDataURL="data:image/jpeg;base64,/9j/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAAIAAoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAhEAACAQMDBQAAAAAAAAAAAAABAgMABAUGIWEREiMxUf/EABUBAQEAAAAAAAAAAAAAAAAAAAMF/8QAGhEAAgIDAAAAAAAAAAAAAAAAAAECEgMRkf/aAAwDAQACEQMRAD8AltJagyeH0AthI5xdrLcNM91BF5pX2HaH9bcfaSXWGaRmknyJckliyjqTzSlT54b6bk+h0R//2Q=="
  alt="Bild des Autors"
  placeholder="blur"
/>

Webpack 5

Mit Next.js 10.2 haben wir die Einführung von webpack 5 auf alle Anwendungen ohne benutzerdefinierte webpack-Konfiguration in ihrer next.config.js ausgeweitet. Heute machen wir webpack 5 zum Standard für alle Next.js-Anwendungen, was eine Vielzahl von Features und Verbesserungen bietet.

Wir haben eng mit der Community zusammengearbeitet, um einen reibungslosen Übergang zu webpack 5 zu gewährleisten. Über 3.400 bestehende Next.js-Integrationstests laufen bei jedem Pull Request mit aktiviertem webpack 5.

Wenn Ihre Anwendung eine benutzerdefinierte webpack-Konfiguration hat, empfehlen wir, die Upgrade-Dokumentation für webpack 5 zu befolgen. Wenn Sie auf Probleme stoßen, teilen Sie uns bitte Ihr Feedback mit.

Create React App Migration

In den letzten sechs Monaten haben wir eine Zunahme von Anwendungen beobachtet, die von Create React App migrieren zu Next.js, um viele der Developer Experience- und Endbenutzerleistungsverbesserungen von Next.js zu nutzen.

Um Entwicklern bei der Konvertierung ihrer Anwendungen zu Next.js zu helfen, haben wir ein neues Tool zu @next/codemod hinzugefügt, das Create React App-Anwendungen automatisch in Next.js-kompatible Anwendungen umwandelt.

Die Transformation fügt automatisch ein pages/-Verzeichnis hinzu und verschiebt CSS-Imports an die richtige Stelle. Es aktiviert auch einen Create React App-Kompatibilitätsmodus in Next.js, der sicherstellt, dass einige in Create React App verwendete Muster mit Next.js funktionieren.

Durch Nutzung der neuen Transformation können Sie Next.js schrittweise einführen, während die Funktionalität der bestehenden Create React App-Anwendung erhalten bleibt.

Um mit der Migration Ihres Create React App-Projekts zu beginnen, verwenden Sie den folgenden Befehl:

Terminal
npx @next/codemod cra-to-next

Dieses Feature ist derzeit experimentell. Bitte teilen Sie Ihr Feedback in dieser Diskussion.

Next.js Live (Preview Release)

Next.js Live ist eine Fortsetzung unserer Mission, die Entwicklung nicht nur schneller und angenehmer zu machen, sondern vor allem inklusiver für die gesamte Organisation. Durch Nutzung modernster Technologien wie ServiceWorker, WebAssembly und ES Modules bringt Next.js Live den gesamten Entwicklungsprozess in den Webbrowser. Dies eröffnet Möglichkeiten wie Zusammenarbeit und sofortiges Teilen mit einer URL, ohne Build-Schritt. Für Entwickler bedeutet dies eine schnellere Feedback-Schleife, weniger Wartezeit auf Builds und Echtzeit-Peer-Programming und -Bearbeitung im Browser.

Um mehr über Next.js Live und wie Sie es mit Vercels Echtzeit-Kollaborations-Engine kombinieren können, lesen Sie den Abschnitt Next.js Live in der Dokumentation.

Upgrade-Anleitung

Next.js 11 führt einige Breaking Changes ein, die die meisten Benutzer nicht betreffen sollten. Diese Legacy-Features wurden jahrelang abwärtskompatibel gehalten, einige bis zurück zu v4.0.

Diese Features wurden entfernt, um die Bundle-Größe zu verringern und die Codebasis für die Zukunft wartbar zu halten. Um mehr über das Upgrade von Version 10 auf 11 zu erfahren, lesen Sie die Upgrade-Anleitung.

Mit Next.js 11 wurde die minimale React-Version auf 17.0.2 aktualisiert. Weitere Details finden Sie im React 17 Blogpost. Wir arbeiten auch eng mit dem React-Team zusammen, während sie React 18 einführen. Next.js 11 verwendet createRoot, wenn React 18 Alpha verwendet wird.

Community

Next.js ist das Ergebnis der gemeinsamen Arbeit von über 1.600 individuellen Entwicklern, Industriepartnern wie Google und Facebook und unserem Kernteam.

Wir sind stolz darauf, dass diese Community weiter wächst. Allein in den letzten sechs Monaten haben wir eine 50%ige Steigerung der Next.js-Downloads auf NPM gesehen, von 4,1 Mio. auf 6,2 Mio., und die Anzahl der Homepages, die Next.js in den Alexa Top 10.000 verwenden, ist um 50% gestiegen.

Diese Version wurde durch die Beiträge von ermöglicht: @kahy9, @ljosberinn, @leerob, @kettanaito, @thomasboyt, @hussainanjar, @styfle, @devknoll, @LiuuY, @timneutkens, @housseindjirdeh, @PepijnSenders, @janicklas-ralph, @payapula, @tmtk75, @ijjk, @hiramhuang, @daku10, @atcastle, @matamatanot, @pelhage, @Lukazovic, @Mzaien, @gleich, @geshan, @Munawwar, @ykzts, @vitalybaev, @mottox2, @vvo, @chrisneven, @turneand, @d3lm, @akellbl4, @sokra, @johnjago, @alicanyildirim, @sanathusk, @valse, @samrobbins85, @SamVerschueren, @ademilter, @ctjlewis, @brandondc741, @eltociear, @martpie, @kasipavankumar, @joecohens, @alexbrazier, @jamsinclair, @fabianishere, @rokinsky, @msidqi, @rubensdemelo, @Simply007, @bradlc, @SinimaWath, @rgabs, @darshkpatel, @sumanthratna, @shuding, @prophet1996, @Joonpark13, @tremby, @stefanprobst, @dopt, @rishabhpoddar, @aydinkn, @ErfanMirzapour, @tubbo, @frontendtony, @eric-burel, @iker-barriocanal, @eps1lon, @Gigiz, @mplis, @HaNdTriX und @jigsawye.

Die folgenden Features wurden auf der Next.js Conf erwähnt, wurden aber bereits früher in den Versionen 10.1 und 10.2 ausgeliefert:

  • Automatische Webfont-Optimierung: Verbesserte Leistung durch Inlining von Font-CSS.
  • Schnelleres Refresh: 100ms bis 200ms schnelleres Refresh.
  • next/image-Verbesserungen: Apple Silicon (M1)-Unterstützung sowie mehr Layout- und Loader-Optionen.
  • Next.js Commerce Shopify-Integration: Flexible Datenebene für komponierbare E-Commerce-Apps. Next.js Commerce unterstützt derzeit Shopify, BigCommerce, Saleor, Swell und Vendure.