Erstellung eines statischen Exports Ihrer 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:

next.config.js
/**
 * @type {import('next').NextConfig}
 */
const nextConfig = {
  output: 'export',

  // Optional: Ändert Links `/me` -> `/me/` und erzeugt `/me.html` -> `/me/index.html`
  // trailingSlash: true,

  // Optional: Verhindert automatische Umleitung `/me` -> `/me/`, behält `href` bei
  // skipTrailingSlashRedirect: true,

  // Optional: Ändert das Ausgabeverzeichnis `out` -> `dist`
  // distDir: 'dist',
}

module.exports = nextConfig

Nach Ausführung von next build erstellt Next.js einen out-Ordner mit den HTML/CSS/JS-Assets für Ihre Anwendung.

Sie können getStaticProps und getStaticPaths nutzen, um für jede Seite in Ihrem pages-Verzeichnis eine HTML-Datei zu generieren (oder mehr für dynamische Routen).

Unterstützte Funktionen

Die meisten Kernfunktionen von Next.js, die zum Erstellen einer statischen Website benötigt werden, werden unterstützt, darunter:

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:

next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export',
  images: {
    loader: 'custom',
    loaderFile: './my-loader.ts',
  },
}

module.exports = nextConfig

Dieser benutzerdefinierte Loader definiert, wie Bilder von einer Remote-Quelle abgerufen werden. Beispielsweise konstruiert der folgende Loader die URL für Cloudinary:

export default function cloudinaryLoader({
  src,
  width,
  quality,
}: {
  src: string
  width: number
  quality?: number
}) {
  const params = ['f_auto', 'c_limit', `w_${width}`, `q_${quality || 'auto'}`]
  return `https://res.cloudinary.com/demo/image/upload/${params.join(
    ','
  )}${src}`
}

Sie können dann next/image in Ihrer Anwendung verwenden und relative Pfade zu den Bildern in Cloudinary angeben:

import Image from 'next/image'

export default function Page() {
  return <Image alt="turtles" src="/turtles.jpg" width={300} height={300} />
}

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:

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:

nginx.conf
server {
  listen 80;
  server_name acme.com;

  root /var/www/out;

  location / {
      try_files $uri $uri.html $uri/ =404;
  }

  # Dies ist notwendig, wenn `trailingSlash: false`.
  # Kann weggelassen werden, wenn `trailingSlash: true`.
  location /blog/ {
      rewrite ^/blog/(.*)$ /blog/$1.html break;
  }

  error_page 404 /404.html;
  location = /404.html {
      internal;
  }
}

Versionsverlauf

VersionÄnderungen
v14.0.0next export wurde zugunsten von "output": "export" entfernt
v13.4.0App Router (Stable) fügt erweiterte Unterstützung für statische Exports hinzu, einschließlich React Server Components und Route Handlers.
v13.3.0next export ist veraltet und wurde durch "output": "export" ersetzt

On this page