Projektstruktur und Organisation

Diese Seite bietet einen Überblick über alle Ordner- und Dateikonventionen in Next.js sowie Empfehlungen zur Organisation Ihres Projekts.

Ordner- und Dateikonventionen

Top-Level-Ordner

Top-Level-Ordner dienen der Organisation Ihres Anwendungscodes und statischer Assets.

Route-Segmente zu Pfadsegmenten
appApp Router
pagesPages Router
publicStatische Assets für den Einsatz
srcOptionaler Quellordner der Anwendung

Top-Level-Dateien

Top-Level-Dateien werden zur Konfiguration Ihrer Anwendung, Verwaltung von Abhängigkeiten, Ausführung von Middleware, Integration von Monitoring-Tools und Definition von Umgebungsvariablen verwendet.

Next.js
next.config.jsKonfigurationsdatei für Next.js
package.jsonProjektabhängigkeiten und Skripte
instrumentation.tsOpenTelemetry- und Instrumentationsdatei
middleware.tsNext.js-Request-Middleware
.envUmgebungsvariablen
.env.localLokale Umgebungsvariablen
.env.productionProduktions-Umgebungsvariablen
.env.developmentEntwicklungs-Umgebungsvariablen
.eslintrc.jsonKonfigurationsdatei für ESLint
.gitignoreGit-Dateien und -Ordner zum Ignorieren
next-env.d.tsTypeScript-Deklarationsdatei für Next.js
tsconfig.jsonKonfigurationsdatei für TypeScript
jsconfig.jsonKonfigurationsdatei für JavaScript

Routing-Dateien

layout.js .jsx .tsxLayout
page.js .jsx .tsxSeite
loading.js .jsx .tsxLade-UI
not-found.js .jsx .tsxNicht-gefunden-UI
error.js .jsx .tsxFehler-UI
global-error.js .jsx .tsxGlobale Fehler-UI
route.js .tsAPI-Endpunkt
template.js .jsx .tsxNeu gerendertes Layout
default.js .jsx .tsxFallback-Seite für parallele Routen

Verschachtelte Routen

folderRoutensegment
folder/folderVerschachteltes Routensegment

Dynamische Routen

[folder]Dynamisches Routensegment
[...folder]Catch-all-Routensegment
[[...folder]]Optionales Catch-all-Routensegment

Routengruppen und private Ordner

(folder)Routen gruppieren ohne Routing zu beeinflussen
_folderOrdner und Kindsegmente vom Routing ausschließen

Parallele und abgefangene Routen

@folderBenannter Slot
(.)folderAuf gleicher Ebene abfangen
(..)folderEine Ebene höher abfangen
(..)(..)folderZwei Ebenen höher abfangen
(...)folderVon der Wurzel abfangen

Metadaten-Dateikonventionen

App-Icons

favicon.icoFavicon-Datei
icon.ico .jpg .jpeg .png .svgApp-Icon-Datei
icon.js .ts .tsxGeneriertes App-Icon
apple-icon.jpg .jpeg, .pngApple-App-Icon-Datei
apple-icon.js .ts .tsxGeneriertes Apple-App-Icon

Open Graph und Twitter-Bilder

opengraph-image.jpg .jpeg .png .gifOpen-Graph-Bilddatei
opengraph-image.js .ts .tsxGeneriertes Open-Graph-Bild
twitter-image.jpg .jpeg .png .gifTwitter-Bilddatei
twitter-image.js .ts .tsxGeneriertes Twitter-Bild

SEO

sitemap.xmlSitemap-Datei
sitemap.js .tsGenerierte Sitemap
robots.txtRobots-Datei
robots.js .tsGenerierte Robots-Datei

Organisation Ihres Projekts

Next.js ist nicht vorschreibend in Bezug auf die Organisation und Zusammenstellung Ihrer Projektdateien. Es bietet jedoch mehrere Funktionen, die Ihnen bei der Organisation Ihres Projekts helfen.

Komponentenhierarchie

Die in speziellen Dateien definierten Komponenten werden in einer bestimmten Hierarchie gerendert:

  • layout.js
  • template.js
  • error.js (React-Fehlerbegrenzung)
  • loading.js (React-Suspense-Begrenzung)
  • not-found.js (React-Fehlerbegrenzung)
  • page.js oder verschachteltes layout.js
Komponentenhierarchie für Dateikonventionen

Die Komponenten werden rekursiv in verschachtelten Routen gerendert, was bedeutet, dass die Komponenten eines Routensegments innerhalb der Komponenten ihres übergeordneten Segments verschachtelt werden.

Verschachtelte Komponentenhierarchie für Dateikonventionen

Colocation (Zusammenlagerung)

Im app-Verzeichnis definieren verschachtelte Ordner die Routenstruktur. Jeder Ordner repräsentiert ein Routensegment, das einem entsprechenden Segment in einem URL-Pfad zugeordnet ist.

Allerdings ist eine Route nicht öffentlich zugänglich, bis eine page.js- oder route.js-Datei zu einem Routensegment hinzugefügt wird.

Ein Diagramm, das zeigt, wie eine Route erst öffentlich zugänglich wird, wenn eine page.js- oder route.js-Datei zu einem Routensegment hinzugefügt wird.

Und selbst wenn eine Route öffentlich zugänglich gemacht wird, wird nur der Inhalt, der von page.js oder route.js zurückgegeben wird, an den Client gesendet.

Ein Diagramm, das zeigt, wie page.js- und route.js-Dateien Routen öffentlich zugänglich machen.

Das bedeutet, dass Projektdateien sicher zusammen innerhalb von Routensegmenten im app-Verzeichnis abgelegt werden können, ohne versehentlich routbar zu sein.

Ein Diagramm, das zeigt, dass zusammen abgelegte Projektdateien nicht routbar sind, selbst wenn ein Segment eine page.js- oder route.js-Datei enthält.

Gut zu wissen: Während Sie Ihre Projektdateien in app zusammenlegen können, müssen Sie dies nicht tun. Wenn Sie es bevorzugen, können Sie sie außerhalb des app-Verzeichnisses belassen.

Private Ordner

Private Ordner können erstellt werden, indem einem Ordner ein Unterstrich vorangestellt wird: _folderName

Dies zeigt an, dass der Ordner ein privates Implementierungsdetail ist und vom Routing-System nicht berücksichtigt werden sollte, wodurch der Ordner und alle seine Unterordner vom Routing ausgeschlossen werden.

Eine Beispielordnerstruktur mit privaten Ordnern

Da Dateien im app-Verzeichnis standardmäßig sicher zusammengelegt werden können, sind private Ordner für die Zusammenlagerung nicht erforderlich. Sie können jedoch nützlich sein für:

  • Trennung von UI-Logik und Routing-Logik.
  • Konsistente Organisation interner Dateien in einem Projekt und im Next.js-Ökosystem.
  • Sortierung und Gruppierung von Dateien in Code-Editoren.
  • Vermeidung potenzieller Namenskonflikte mit zukünftigen Next.js-Dateikonventionen.

Gut zu wissen:

  • Obwohl es keine Framework-Konvention ist, können Sie auch Dateien außerhalb privater Ordner als "privat" markieren, indem Sie das gleiche Unterstrichmuster verwenden.
  • Sie können URL-Segmente erstellen, die mit einem Unterstrich beginnen, indem Sie dem Ordnernamen %5F voranstellen (die URL-kodierte Form eines Unterstrichs): %5FfolderName.
  • Wenn Sie keine privaten Ordner verwenden, ist es hilfreich, die speziellen Dateikonventionen von Next.js zu kennen, um unerwartete Namenskonflikte zu vermeiden.

Routengruppen

Routengruppen können erstellt werden, indem ein Ordner in Klammern eingeschlossen wird: (folderName)

Dies zeigt an, dass der Ordner nur organisatorischen Zwecken dient und nicht in den URL-Pfad der Route aufgenommen werden sollte.

Eine Beispielordnerstruktur mit Routengruppen

Routengruppen sind nützlich für:

src-Ordner

Next.js unterstützt die Speicherung von Anwendungscode (einschließlich app) in einem optionalen src-Ordner. Dies trennt den Anwendungscode von Projektkonfigurationsdateien, die meist im Stammverzeichnis eines Projekts liegen.

Eine Beispielordnerstruktur mit dem `src`-Ordner

Beispiele

Der folgende Abschnitt gibt einen sehr hochrangigen Überblick über gängige Strategien. Die einfachste Erkenntnis ist, eine Strategie zu wählen, die für Sie und Ihr Team funktioniert, und diese konsistent im Projekt anzuwenden.

Gut zu wissen: In unseren Beispielen unten verwenden wir components- und lib-Ordner als allgemeine Platzhalter. Ihre Benennung hat keine besondere Bedeutung für das Framework, und Ihre Projekte könnten andere Ordner wie ui, utils, hooks, styles usw. verwenden.

Projektdateien außerhalb von app speichern

Diese Strategie speichert den gesamten Anwendungscode in gemeinsamen Ordnern im Stammverzeichnis Ihres Projekts und behält das app-Verzeichnis rein für Routing-Zwecke bei.

Eine Beispielordnerstruktur mit Projektdateien außerhalb von app

Projektdateien in Top-Level-Ordnern innerhalb von app speichern

Diese Strategie speichert den gesamten Anwendungscode in gemeinsamen Ordnern im Stammverzeichnis des app-Verzeichnisses.

Eine Beispielordnerstruktur mit Projektdateien innerhalb von app

Projektdateien nach Funktion oder Route aufteilen

Diese Strategie speichert global geteilten Anwendungscode im Stammverzeichnis von app und teilt spezifischeren Anwendungscode in die Routensegmente auf, die ihn verwenden.

Eine Beispielordnerstruktur mit Projektdateien, die nach Funktion oder Route aufgeteilt sind

Routen organisieren, ohne den URL-Pfad zu beeinflussen

Um Routen zu organisieren, ohne die URL zu beeinflussen, erstellen Sie eine Gruppe, um verwandte Routen zusammenzuhalten. Die Ordner in Klammern werden aus der URL ausgelassen (z.B. (marketing) oder (shop)).

Organisation von Routen mit Routengruppen

Obwohl die Routen innerhalb von (marketing) und (shop) die gleiche URL-Hierarchie teilen, können Sie für jede Gruppe ein unterschiedliches Layout erstellen, indem Sie eine layout.js-Datei in ihren Ordnern hinzufügen.

Routengruppen mit mehreren Layouts

Bestimmte Segmente für ein Layout auswählen

Um bestimmte Routen für ein Layout auszuwählen, erstellen Sie eine neue Routengruppe (z.B. (shop)) und verschieben die Routen, die das gleiche Layout teilen, in die Gruppe (z.B. account und cart). Die Routen außerhalb der Gruppe teilen das Layout nicht (z.B. checkout).

Routengruppen mit Opt-in-Layouts

Lade-Skelette für eine bestimmte Route auswählen

Um ein Lade-Skelett über eine loading.js-Datei auf eine bestimmte Route anzuwenden, erstellen Sie eine neue Routengruppe (z.B. /(overview)) und verschieben Sie Ihre loading.tsx in diese Routengruppe.

Ordnerstruktur mit einer loading.tsx und einer page.tsx innerhalb der Routengruppe

Nun wird die loading.tsx-Datei nur auf Ihre Dashboard → Übersichtsseite angewendet, anstatt auf alle Ihre Dashboard-Seiten, ohne die URL-Pfadstruktur zu beeinflussen.

Mehrere Root-Layouts erstellen

Um mehrere Root-Layouts zu erstellen, entfernen Sie die layout.js-Datei auf oberster Ebene und fügen Sie eine layout.js-Datei in jede Routengruppe ein. Dies ist nützlich, um eine Anwendung in Abschnitte zu unterteilen, die eine komplett andere UI oder Erfahrung haben. Die <html>- und <body>-Tags müssen zu jedem Root-Layout hinzugefügt werden.

Routengruppen mit mehreren Root-Layouts

Im obigen Beispiel haben sowohl (marketing) als auch (shop) ihr eigenes Root-Layout.