Statische Exporte
Next.js ermöglicht es, als statische Website oder Single-Page-Anwendung (SPA) zu starten und später optional Funktionen zu aktivieren, die einen Server erfordern.
Bei Ausführung von next build
generiert Next.js pro Route eine HTML-Datei. Indem eine strikte SPA in einzelne HTML-Dateien aufgeteilt wird, kann Next.js das Laden von unnötigem JavaScript-Code auf der Clientseite vermeiden und so die Bundle-Größe reduzieren und schnellere Seitenladevorgänge ermöglichen.
Da Next.js diesen statischen Export unterstützt, kann er auf jedem Webserver bereitgestellt und gehostet werden, der statische HTML/CSS/JS-Assets bedienen kann.
Konfiguration
Um einen statischen Export zu aktivieren, ändern Sie den Ausgabemodus in next.config.js
:
Nach Ausführung von next build
wird Next.js einen out
-Ordner erzeugen, der die HTML/CSS/JS-Assets für Ihre Anwendung enthält.
Unterstützte Funktionen
Der Kern von Next.js wurde entwickelt, um statische Exporte zu unterstützen.
Server-Komponenten
Bei Ausführung von next build
zur Generierung eines statischen Exports werden Server-Komponenten innerhalb des app
-Verzeichnisses während des Build-Prozesses ausgeführt, ähnlich der traditionellen statischen Site-Generierung.
Die resultierende Komponente wird in statisches HTML für den initialen Seitenaufruf und eine statische Payload für Client-Navigation zwischen Routen gerendert. Für Server-Komponenten sind keine Änderungen beim statischen Export erforderlich, es sei denn, sie verwenden dynamische Serverfunktionen.
Client-Komponenten
Wenn Sie Daten auf dem Client abrufen möchten, können Sie eine Client-Komponente mit SWR verwenden, um Anfragen zu memoisieren.
Da Routenübergänge clientseitig erfolgen, verhält sich dies wie eine traditionelle SPA. Die folgende Index-Route erlaubt beispielsweise die Navigation zu verschiedenen Posts auf dem Client:
Bildoptimierung
Bildoptimierung durch next/image
kann mit einem statischen Export verwendet werden, indem ein benutzerdefinierter Bildlader in next.config.js
definiert wird. Beispielsweise können Sie Bilder mit einem Dienst wie Cloudinary optimieren:
Dieser benutzerdefinierte Loader definiert, wie Bilder von einer Remote-Quelle abgerufen werden. Der folgende Loader konstruiert beispielsweise die URL für Cloudinary:
Sie können dann next/image
in Ihrer Anwendung verwenden und relative Pfade zum Bild in Cloudinary definieren:
Routen-Handler
Routen-Handler rendern eine statische Antwort bei Ausführung von next build
. Nur die HTTP-Methode GET
wird unterstützt. Dies kann verwendet werden, um statische HTML-, JSON-, TXT- oder andere Dateien aus zwischengespeicherten oder nicht zwischengespeicherten Daten zu generieren. Beispiel:
Die obige Datei app/data.json/route.ts
wird während next build
in eine statische Datei gerendert und erzeugt data.json
mit dem Inhalt { name: 'Lee' }
.
Wenn Sie dynamische Werte aus der eingehenden Anfrage lesen müssen, können Sie keinen statischen Export verwenden.
Browser-APIs
Client-Komponenten werden während next build
in HTML vorgerendert. Da Web-APIs wie window
, localStorage
und navigator
auf dem Server nicht verfügbar sind, müssen Sie sicher nur beim Ausführen im Browser auf diese APIs zugreifen. Beispiel:
Nicht unterstützte Funktionen
Funktionen, die einen Node.js-Server erfordern oder dynamische Logik benötigen, die während des Build-Prozesses nicht berechnet werden kann, werden nicht unterstützt:
- Dynamische Routen mit
dynamicParams: true
- Dynamische Routen ohne
generateStaticParams()
- Route-Handler, die sich auf Request verlassen
- Cookies
- Rewrites
- Weiterleitungen
- Header
- Middleware
- Inkrementelle statische Regenerierung
- Bildoptimierung mit dem Standard-
loader
- Entwurfsmodus
- Server-Aktionen
Der Versuch, eine dieser Funktionen mit next dev
zu verwenden, führt zu einem Fehler, ähnlich wie beim Setzen der dynamic
-Option auf error
im Root-Layout.
Bereitstellung
Mit einem statischen Export kann Next.js auf jedem Webserver bereitgestellt und gehostet werden, der statische HTML-/CSS-/JS-Assets bedienen kann.
Bei Ausführung von next build
generiert Next.js den statischen Export in den out
-Ordner. Nehmen wir beispielsweise an, Sie haben die folgenden Routen:
/
/blog/[id]
Nach Ausführung von next build
generiert Next.js die folgenden Dateien:
/out/index.html
/out/404.html
/out/blog/post-1.html
/out/blog/post-2.html
Wenn Sie einen statischen Host wie Nginx verwenden, können Sie Weiterleitungen von eingehenden Anfragen zu den richtigen Dateien konfigurieren:
Versionshistorie
Version | Änderungen |
---|---|
v14.0.0 | next export wurde zugunsten von "output": "export" entfernt |
v13.4.0 | App Router (stabil) fügt erweiterte statische Export-Unterstützung hinzu, einschließlich Verwendung von React Server Components und Route Handlers. |
v13.3.0 | next export ist veraltet und wird durch "output": "export" ersetzt |