output
Während eines Builds verfolgt Next.js automatisch jede Seite und ihre Abhängigkeiten, um alle Dateien zu bestimmen, die für die Bereitstellung einer Produktionsversion Ihrer Anwendung benötigt werden.
Diese Funktion hilft, die Größe der Bereitstellungen drastisch zu reduzieren. Früher mussten Sie beim Bereitstellen mit Docker alle Dateien aus den dependencies
Ihres Pakets installiert haben, um next start
auszuführen. Ab Next.js 12 können Sie die Output File Tracing-Funktion im .next/
-Verzeichnis nutzen, um nur die notwendigen Dateien einzubeziehen.
Darüber hinaus entfällt die Notwendigkeit für das veraltete serverless
-Ziel, das verschiedene Probleme verursachen und unnötige Duplizierung erzeugen kann.
Funktionsweise
Während next build
verwendet Next.js @vercel/nft
, um import
, require
und fs
-Verwendung statisch zu analysieren und alle Dateien zu bestimmen, die eine Seite möglicherweise lädt.
Der Produktionsserver von Next.js wird ebenfalls auf seine benötigten Dateien hin verfolgt und unter .next/next-server.js.nft.json
ausgegeben, was in der Produktion genutzt werden kann.
Um die .nft.json
-Dateien, die in das .next
-Ausgabeverzeichnis ausgegeben werden, zu nutzen, können Sie die Liste der Dateien in jeder Trace lesen, die relativ zur .nft.json
-Datei sind, und sie dann an Ihren Bereitstellungsort kopieren.
Automatisches Kopieren verfolgter Dateien
Next.js kann automatisch einen standalone
-Ordner erstellen, der nur die notwendigen Dateien für eine Produktionsbereitstellung kopiert, einschließlich ausgewählter Dateien in node_modules
.
Um dieses automatische Kopieren zu nutzen, können Sie es in Ihrer next.config.js
aktivieren:
Dadurch wird ein Ordner unter .next/standalone
erstellt, der dann ohne Installation von node_modules
bereitgestellt werden kann.
Zusätzlich wird eine minimale server.js
-Datei ausgegeben, die anstelle von next start
verwendet werden kann. Dieser minimale Server kopiert standardmäßig nicht die public
- oder .next/static
-Ordner, da diese idealerweise von einem CDN gehandhabt werden sollten, obwohl diese Ordner manuell in die standalone/public
- und standalone/.next/static
-Ordner kopiert werden können, wonach die server.js
-Datei diese automatisch bereitstellt.
Um diese manuell zu kopieren, können Sie das cp
-Kommandozeilentool nach next build
verwenden:
Um Ihre minimale server.js
-Datei lokal zu starten, führen Sie den folgenden Befehl aus:
Wissenswert:
next.config.js
wird währendnext build
gelesen und in dieserver.js
-Ausgabedatei serialisiert. Wenn die veralteten OptionenserverRuntimeConfig
oderpublicRuntimeConfig
verwendet werden, sind die Werte spezifisch für die Werte zum Build-Zeitpunkt.- Wenn Ihr Projekt auf einen bestimmten Port oder Hostnamen hören muss, können Sie die Umgebungsvariablen
PORT
oderHOSTNAME
definieren, bevor Sieserver.js
ausführen. Führen Sie beispielsweisePORT=8080 HOSTNAME=0.0.0.0 node server.js
aus, um den Server unterhttp://0.0.0.0:8080
zu starten.
Einschränkungen
- Beim Tracing in Monorepo-Setups wird standardmäßig das Projektverzeichnis für das Tracing verwendet. Für
next build packages/web-app
wärepackages/web-app
das Tracing-Root, und Dateien außerhalb dieses Ordners werden nicht einbezogen. Um Dateien außerhalb dieses Ordners einzubeziehen, können SieoutputFileTracingRoot
in Ihrernext.config.js
festlegen.
- Es gibt einige Fälle, in denen Next.js möglicherweise benötigte Dateien nicht einbezieht oder ungenutzte Dateien fälschlicherweise einbezieht. In diesen Fällen können Sie
outputFileTracingExcludes
undoutputFileTracingIncludes
innext.config.js
nutzen. Jede Konfiguration akzeptiert ein Objekt mit minimatch-Globs für den Schlüssel, um bestimmte Seiten abzugleichen, und einen Wert eines Arrays mit Globs relativ zum Projekt-Root, die entweder in die Trace ein- oder ausgeschlossen werden sollen.
Hinweis: Der Schlüssel von outputFileTracingIncludes
/outputFileTracingExcludes
ist eine Glob, daher müssen Sonderzeichen maskiert werden.
Experimentelles turbotrace
Das Tracing von Abhängigkeiten kann langsam sein, da es sehr komplexe Berechnungen und Analysen erfordert. Wir haben turbotrace
in Rust als eine schnellere und intelligentere Alternative zur JavaScript-Implementierung erstellt.
Um es zu aktivieren, können Sie Ihrer next.config.js
die folgende Konfiguration hinzufügen: