Menu

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:

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/`, stattdessen wird `href` beibehalten
  // skipTrailingSlashRedirect: true,
 
  // Optional: Ändert das Ausgabeverzeichnis `out` -> `dist`
  // distDir: 'dist',
}
 
module.exports = nextConfig

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.

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

Unterstützte Funktionen

Der Großteil der Kernfunktionen von Next.js, die zum Aufbau einer statischen Website benötigt werden, wird unterstützt, einschließlich:

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:

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. Der folgende Loader konstruiert beispielsweise die URL für Cloudinary:

my-loader.ts
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}`
}
my-loader.js
export default function cloudinaryLoader({ src, width, quality }) {
  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 zum Bild in Cloudinary definieren:

app/page.tsx
TypeScript
import Image from 'next/image'
 
export default function Page() {
  return <Image alt="Schildkröten" src="/turtles.jpg" width={300} height={300} />
}

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:

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:

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`.
  # Sie können dies weglassen, wenn `trailingSlash: true`.
  location /blog/ {
      rewrite ^/blog/(.*)$ /blog/$1.html break;
  }
 
  error_page 404 /404.html;
  location = /404.html {
      internal;
  }
}

Versionshistorie

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