Erstellung eines statischen Exports für Ihre Next.js-Anwendung
Next.js ermöglicht den Start als statische Website oder Single-Page Application (SPA), mit der Option, später auf Funktionen zu erweitern, die einen Server erfordern.
Beim Ausführen von next build
generiert Next.js eine HTML-Datei pro Route. Durch die Aufteilung einer strikten SPA in einzelne HTML-Dateien kann Next.js unnötigen JavaScript-Code auf der Client-Seite vermeiden, was die Bundle-Größe reduziert und schnellere Seitenladezeiten ermöglicht.
Da Next.js diesen statischen Export unterstützt, kann er auf jedem Webserver bereitgestellt und gehostet werden, der statische HTML/CSS/JS-Assets servieren kann.
Konfiguration
Um einen statischen Export zu aktivieren, ändern Sie den Ausgabemodus in next.config.js
:
Nach Ausführung von next build
erstellt Next.js einen out
-Ordner mit den HTML/CSS/JS-Assets für Ihre Anwendung.
Unterstützte Funktionen
Der Kern von Next.js wurde für statische Exports konzipiert.
Server Components
Wenn Sie next build
für einen statischen Export ausführen, werden Server Components im app
-Verzeichnis während des Builds ausgeführt, ähnlich wie bei traditioneller statischer Seiten-Generierung.
Die resultierende Komponente wird in statisches HTML für das initiale Seitenladen und eine statische Nutzlast für Client-Navigation zwischen Routen gerendert. Für Ihre Server Components sind keine Änderungen erforderlich, es sei denn, sie verwenden dynamische Server-Funktionen.
Client Components
Wenn Sie Daten auf dem Client abrufen möchten, können Sie eine Client Component mit SWR verwenden, um Anfragen zwischenzuspeichern.
Da Routenübergänge clientseitig erfolgen, verhält sich dies wie eine traditionelle SPA. Beispielsweise ermöglicht die folgende Index-Route die Navigation zu verschiedenen Beiträgen auf dem Client:
Bildoptimierung
Bildoptimierung über next/image
kann mit einem statischen Export verwendet werden, indem ein benutzerdefinierter Image-Loader 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. Beispielsweise konstruiert der folgende Loader die URL für Cloudinary:
Sie können dann next/image
in Ihrer Anwendung verwenden und relative Pfade zu den Bildern in Cloudinary angeben:
Route Handlers
Route Handlers rendern eine statische Antwort beim Ausführen von next build
. Nur das GET
HTTP-Verb wird unterstützt. Dies kann verwendet werden, um statische HTML-, JSON-, TXT- oder andere Dateien aus gecachten oder ungecachten 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 Components 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 sicherstellen, dass Sie nur im Browser darauf zugreifen. Beispiel:
Nicht unterstützte Funktionen
Funktionen, die einen Node.js-Server erfordern oder dynamische Logik, die während des Build-Prozesses nicht berechnet werden kann, werden nicht unterstützt:
- Dynamische Routen mit
dynamicParams: true
- Dynamische Routen ohne
generateStaticParams()
- Route Handlers, die auf Request angewiesen sind
- Cookies
- Rewrites
- Redirects
- Headers
- Middleware
- Inkrementelle statische Regeneration
- Bildoptimierung mit dem Standard-
loader
- Draft Mode
- Server Actions
- Intercepting Routes
Der Versuch, diese Funktionen mit next dev
zu verwenden, führt zu einem Fehler, ähnlich wie das 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 servieren kann.
Bei Ausführung von next build
generiert Next.js den statischen Export in den out
-Ordner. Angenommen, Sie haben die folgenden Routen:
/
/blog/[id]
Nach 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 Rewrites von eingehenden Anfragen zu den richtigen Dateien konfigurieren:
Versionsverlauf
Version | Änderungen |
---|---|
v14.0.0 | next export wurde zugunsten von "output": "export" entfernt |
v13.4.0 | App Router (Stable) fügt erweiterte Unterstützung für statische Exports hinzu, einschließlich React Server Components und Route Handlers. |
v13.3.0 | next export ist veraltet und wurde durch "output": "export" ersetzt |