Markdown und MDX
Markdown ist eine leichte Auszeichnungssprache zum Formatieren von Text. Sie ermöglicht es Ihnen, mit einfacher Textsyntax zu schreiben und in strukturell gültiges HTML zu konvertieren. Es wird häufig zum Verfassen von Inhalten auf Websites und Blogs verwendet.
Sie schreiben...
Ausgabe:
MDX ist eine Obermenge von Markdown, die es Ihnen ermöglicht, JSX direkt in Ihren Markdown-Dateien zu schreiben. Es ist eine leistungsstarke Methode, um dynamische Interaktivität hinzuzufügen und React-Komponenten in Ihre Inhalte einzubetten.
Next.js kann sowohl lokale MDX-Inhalte innerhalb Ihrer Anwendung als auch remote MDX-Dateien unterstützen, die dynamisch auf dem Server abgerufen werden. Das Next.js-Plugin übernimmt die Umwandlung von Markdown und React-Komponenten in HTML, einschließlich Unterstützung für die Verwendung in Server-Komponenten (Standard im App Router).
Hinweis: Sehen Sie sich die Portfolio Starter Kit-Vorlage für ein vollständiges funktionierendes Beispiel an.
Abhängigkeiten installieren
Das Paket @next/mdx
und verwandte Pakete werden verwendet, um Next.js so zu konfigurieren, dass es Markdown und MDX verarbeiten kann. Es bezieht Daten aus lokalen Dateien und ermöglicht Ihnen das Erstellen von Seiten mit der Erweiterung .md
oder .mdx
direkt in Ihrem /pages
- oder /app
-Verzeichnis.
Installieren Sie diese Pakete, um MDX mit Next.js zu rendern:
next.config.mjs
konfigurieren
Aktualisieren Sie die next.config.mjs
-Datei im Stammverzeichnis Ihres Projekts, um sie für die Verwendung von MDX zu konfigurieren:
Dies ermöglicht es .md
- und .mdx
-Dateien, als Seiten, Routen oder Importe in Ihrer Anwendung zu fungieren.
mdx-components.tsx
-Datei hinzufügen
Erstellen Sie eine mdx-components.tsx
- (oder .js
-) Datei im Stammverzeichnis Ihres Projekts, um globale MDX-Komponenten zu definieren. Zum Beispiel auf der gleichen Ebene wie pages
oder app
oder innerhalb von src
, falls zutreffend.
Hinweis:
mdx-components.tsx
ist erforderlich, um@next/mdx
mit App Router zu verwenden, und funktioniert nicht ohne diese Datei.- Erfahren Sie mehr über die
mdx-components.tsx
-Dateikonvention.- Erfahren Sie, wie Sie benutzerdefinierte Stile und Komponenten verwenden.
MDX rendern
Sie können MDX mit der dateibasierten Routing-Funktion von Next.js oder durch Importieren von MDX-Dateien in andere Seiten rendern.
Verwendung des dateibasierten Routings
Bei Verwendung des dateibasierten Routings können Sie MDX-Seiten wie jede andere Seite verwenden.
Das umfasst die Möglichkeit, Metadaten zu verwenden.
Erstellen Sie eine neue MDX-Seite im /app
-Verzeichnis:
Sie können MDX in diesen Dateien verwenden und sogar React-Komponenten direkt in Ihrer MDX-Seite importieren:
Die Navigation zur /mdx-page
-Route sollte Ihre gerenderte MDX-Seite anzeigen.
Verwendung von Importen
Erstellen Sie eine neue Seite im /app
-Verzeichnis und eine MDX-Datei an einem beliebigen Ort:
Sie können MDX in diesen Dateien verwenden und sogar React-Komponenten direkt in Ihrer MDX-Seite importieren:
Importieren Sie die MDX-Datei in die Seite, um den Inhalt anzuzeigen:
Die Navigation zur /mdx-page
-Route sollte Ihre gerenderte MDX-Seite anzeigen.
Verwendung von benutzerdefinierten Stilen und Komponenten
Markdown wird, wenn es gerendert wird, auf native HTML-Elemente abgebildet. Das Schreiben des folgenden Markdowns:
Generiert das folgende HTML:
Um Ihr Markdown zu gestalten, können Sie benutzerdefinierte Komponenten bereitstellen, die den generierten HTML-Elementen zugeordnet werden. Stile und Komponenten können global, lokal und mit gemeinsamen Layouts implementiert werden.
Globale Stile und Komponenten
Das Hinzufügen von Stilen und Komponenten in mdx-components.tsx
wirkt sich auf alle MDX-Dateien in Ihrer Anwendung aus.
Lokale Stile und Komponenten
Sie können lokale Stile und Komponenten auf bestimmte Seiten anwenden, indem Sie diese in importierte MDX-Komponenten übergeben. Diese werden mit globalen Stilen und Komponenten zusammengeführt und überschreiben diese.
Gemeinsame Layouts
Um ein Layout für MDX-Seiten zu teilen, können Sie die integrierte Layout-Unterstützung mit dem App Router verwenden.
Verwendung des Tailwind-Typografie-Plugins
Wenn Sie Tailwind zur Gestaltung Ihrer Anwendung verwenden, ermöglicht Ihnen das @tailwindcss/typography
-Plugin die Wiederverwendung Ihrer Tailwind-Konfiguration und -Stile in Ihren Markdown-Dateien.
Das Plugin fügt eine Reihe von prose
-Klassen hinzu, die verwendet werden können, um typografische Stile zu Inhaltsblöcken hinzuzufügen, die aus Quellen wie Markdown stammen.
Installieren Sie Tailwind-Typografie und verwenden Sie es mit gemeinsamen Layouts, um das gewünschte prose
hinzuzufügen.
Frontmatter
Frontmatter ist eine YAML-ähnliche Schlüssel/Wert-Zuordnung, die verwendet werden kann, um Daten über eine Seite zu speichern. @next/mdx
unterstützt Frontmatter nicht standardmäßig, es gibt jedoch viele Lösungen zum Hinzufügen von Frontmatter zu Ihrem MDX-Inhalt, wie:
@next/mdx
erlaubt es Ihnen, Exporte wie jede andere JavaScript-Komponente zu verwenden:
Metadaten können jetzt außerhalb der MDX-Datei referenziert werden:
Ein häufiger Anwendungsfall hierfür ist, wenn Sie eine Sammlung von MDX durchlaufen und Daten extrahieren möchten. Zum Beispiel beim Erstellen einer Blog-Indexseite aus allen Blog-Beiträgen. Sie können Pakete wie Node's fs
-Modul oder globby verwenden, um ein Verzeichnis von Beiträgen zu lesen und die Metadaten zu extrahieren.
Hinweis:
- Die Verwendung von
fs
,globby
usw. kann nur serverseitig erfolgen.- Sehen Sie sich die Portfolio-Starter-Kit Vorlage für ein vollständiges funktionierendes Beispiel an.
Remark- und Rehype-Plugins
Sie können optional remark
- und rehype
-Plugins bereitstellen, um den MDX-Inhalt zu transformieren.
Zum Beispiel können Sie remark-gfm
verwenden, um GitHub Flavored Markdown zu unterstützen.
Da das remark
- und rehype
-Ökosystem nur ESM unterstützt, müssen Sie next.config.mjs
als Konfigurationsdatei verwenden.
Entferntes MDX
Wenn sich Ihre MDX-Dateien oder -Inhalte woanders befinden, können Sie sie dynamisch auf dem Server abrufen. Dies ist nützlich für Inhalte, die in einem separaten lokalen Ordner, CMS, Datenbank oder anderswo gespeichert sind. Ein beliebtes Community-Paket für diesen Zweck ist next-mdx-remote
.
Hinweis: Gehen Sie mit Vorsicht vor. MDX wird zu JavaScript kompiliert und auf dem Server ausgeführt. Sie sollten MDX-Inhalte nur aus einer vertrauenswürdigen Quelle abrufen, da es sonst zu Remote-Code-Ausführung (RCE) führen kann.
Das folgende Beispiel verwendet next-mdx-remote
:
Der Aufruf der /mdx-page-remote
-Route sollte Ihr gerendertes MDX anzeigen.
Vertiefung: Wie transformiert man Markdown in HTML?
React versteht Markdown nicht nativ. Der Markdown-Klartext muss zunächst in HTML umgewandelt werden. Dies kann mit remark
und rehype
erreicht werden.
remark
ist ein Ökosystem von Tools rund um Markdown. rehype
ist dasselbe, aber für HTML. Zum Beispiel transformiert der folgende Code-Snippet Markdown in HTML:
Das remark
- und rehype
-Ökosystem enthält Plugins für Syntaxhervorhebung, Überschriften verlinken, Inhaltsverzeichnis generieren und mehr.
Bei Verwendung von @next/mdx
wie oben gezeigt, müssen Sie remark
oder rehype
nicht direkt verwenden, da dies für Sie erledigt wird. Wir beschreiben es hier für ein tieferes Verständnis dessen, was das @next/mdx
-Paket unter der Haube macht.
Verwendung des Rust-basierten MDX-Compilers (experimentell)
Next.js unterstützt einen neuen in Rust geschriebenen MDX-Compiler. Dieser Compiler ist noch experimentell und wird für den Produktionseinsatz nicht empfohlen. Um den neuen Compiler zu verwenden, müssen Sie next.config.js
bei der Übergabe an withMDX
konfigurieren:
mdxRs
akzeptiert auch ein Objekt zur Konfiguration der MDX-Dateitransformation.
Hinweis:
Diese Option ist erforderlich, wenn Markdown und MDX bei Verwendung von Turbopack (
next dev --turbopack
) verarbeitet werden.