Markdown
Markdown wird häufig verwendet, um textlastige Inhalte wie Blog-Beiträge und Dokumentationen zu erstellen. Astro bietet eine integrierte Unterstützung von Markdown mit einigen zusätzlichen Funktionen wie der Verwendung von JavaScript-Ausdrücken und Astro-Komponenten direkt in deinem Markdown.
Markdown-Seiten
Abschnitt betitelt Markdown-SeitenAstro behandelt jede .md
-Datei innerhalb des Verzeichnisses /src/pages
als eine Seite. Wenn du eine Datei in diesem Verzeichnis oder einem beliebigen Unterverzeichnis ablegst, wird automatisch eine Seitenroute erstellt, die den Pfadnamen der Datei verwendet.
📚 Lies mehr über Astros dateibasiertes Routing.
Einfaches Beispiel
Abschnitt betitelt Einfaches BeispielDer einfachste Einstieg in die Verwendung von Markdown mit Astro besteht darin, die Datei src/pages/index.md
als Startseiten-Route für dein Projekt zu erstellen. Kopiere dann den untenstehenden Beispielinhalt in die Datei und sieh dir den gerenderten HTML-Code auf der Startseite deines Projekts an. Du findest sie normalerweise unter http://localhost:4321/.
Markdown-Layouts
Abschnitt betitelt Markdown-LayoutsMarkdown-Seiten unterstützen eine spezielle Frontmatter-Eigenschaft namens layout
, die den relativen Pfad zu einer Astro-Layout-Komponente definiert. Diese Komponente umgibt deinen Markdown-Inhalt und stellt ein Seitengerüst und alle anderen enthaltenen Elemente der Seitenvorlage bereit.
Ein typisches Layout für Markdown-Seiten beinhaltet Folgendes:
- Eine
content
-Eigenschaft, um auf die Frontmatter-Daten der Markdown-Seite zuzugreifen. - Einen Standard-
<slot />
, der bestimmt, wo im Layout der Markdown-Inhalt der Seite gerendert werden soll.
Die Eigenschaft content
enthält auch die Untereigenschaft astro
, die Zugriff auf zusätzliche Metadaten der Seite bietet, z. B. mit source
auf den vollständigen Quellcode und mit headers
auf alle Überschriften der Markdown-Seite.
Ein Beispiel für das content
-Objekt eines Blogbeitrags könnte wie folgt aussehen:
astro
und url
sind die einzigen garantierten Untereigenschaften, die von Astro in der Eigenschaft content
bereitgestellt werden. Der Rest des Objekts wird durch deine Frontmatter-Variablen definiert.
Frontmatter als Komponenteneigenschaften (Props)
Abschnitt betitelt Frontmatter als Komponenteneigenschaften (Props)Jede Astro-Komponente (nicht nur dein Layout!) kann auf die in deinem Markdown definierten Frontmatter-Daten über die Eigenschaften des Astro.props
-Objekts zugreifen. Das YAML-Frontmatter-Format erlaubt die Verwendung mehrerer Datentypen und ermöglicht dir so, noch umfangreichere Metainformationen aus jedem Blog-Beitrag zu erfassen und sie auf deiner gesamten Astro-Website zu verwenden.
Der Zugriff auf diese Werte ist aus jeder .astro
-Datei heraus möglich und funktioniert genau so, wie wir es oben für Markdown-Layouts beschrieben haben.
Überschriften-IDs
Abschnitt betitelt Überschriften-IDsAstro verwendet github-slugger, um allen Überschriften in Markdown-Dateien automatisch generierte IDs zuzuweisen. Falls einer Überschrift bereits eine benutzerdefinierte ID zugewiesen wurde, bleibt diese erhalten und wird nicht überschrieben.
Die automatischen IDs werden erst hinzugefügt, nachdem alle anderen Markdown-Plugins ausgeführt wurden. Wenn du also ein Plugin wie rehype-toc
einsetzen möchtest, das schon vorher Überschriften-IDs benötigt, solltest du zudem auch ein eigenes Slugging-Plugin wie rehype-slug
hinzufügen.
Markdown-Entwürfe
Abschnitt betitelt Markdown-Entwürfedraft: true
ist ein optionaler Frontmatter-Wert, der eine einzelne .md
-Seite oder einen Beitrag als “unveröffentlicht” markiert. Standardmäßig werden solche Seiten beim Buildvorgang der Website ausgeschlossen.
Markdown-Seiten ohne die Eigenschaft draft
oder solche mit draft: false
sind nicht betroffen und werden beim Buildvorgang mit ausgegeben.
Obwohl draft: true
verhindert, dass eine Seite unter dieser Seitenroute erzeugt wird, gibt Astro.glob()
derzeit alle deine Markdown-Dateien zurück.
Um zu verhindern, dass Entwürfe in ein Beitragsarchiv oder eine Liste der neuesten Beiträge aufgenommen werden, kannst du die von Astro.glob()
zurückgegebenen Ergebnisse filtern:
⚙️ So änderst du das Standardverhalten und aktivierst die Erstellung von Entwurfsseiten:
Füge drafts: true
zu den markdown
-Einstellungen deiner astro.config.mjs
hinzu.
Du kannst auch die Kommandozeilenoption --drafts
bei der Ausführung des Befehls astro build
verwenden, um Entwurfsseiten zu erstellen!
Schreiben von Markdown
Abschnitt betitelt Schreiben von MarkdownAstro unterstützt nicht nur die standardmäßige Markdown-Syntax, sondern erweitert diese um nützliche Funktionen, mit denen du deine Inhalte noch ausdrucksstärker machen kannst. Im Folgenden zeigen wir dir einige Markdown-Funktionen, die es nur in Astro gibt.
Verwendung von Variablen in Markdown
Abschnitt betitelt Verwendung von Variablen in MarkdownFrontmatter-Variablen können direkt in deinem Markdown als Eigenschaften des frontmatter
-Objekts verwendet werden.
Verwendung von Komponenten in Markdown
Abschnitt betitelt Verwendung von Komponenten in MarkdownÜber die Frontmatter-Eigenschaft setup
kannst du Komponenten in Markdown-Dateien importieren und gemeinsam mit Markdown-Inhalten verwenden. Das frontmatter
-Objekt steht auch allen importierten Komponenten zur Verfügung.
Importieren von Markdown
Abschnitt betitelt Importieren von MarkdownDu kannst Markdown-Dateien direkt in deine Astro-Dateien importieren! Für den Import einzelner Seiten verwendest du import
und für mehrere Seiten Astro.glob()
.
Du kannst optional einen Typ für die Variable frontmatter
bereitstellen, indem du ein TypeScript-Generikum verwendest:
Exportierte Eigenschaften
Abschnitt betitelt Exportierte EigenschaftenJede Markdown-Datei exportiert die folgenden Eigenschaften:
frontmatter
Abschnitt betitelt frontmatterEnthält alle Daten, die im YAML-Frontmatter dieser Datei angegeben sind.
Der absolute Pfad dieser Datei (z. B. /home/benutzer/projekte/.../datei.md
).
Wenn es sich um eine Seite handelt, die URL der Seite (z. B. /de/guides/markdown-content/
).
getHeaders()
Abschnitt betitelt getHeaders()Eine asynchrone Funktion, die die Überschriften der Markdown-Datei zurückgibt. Der Rückgabewert folgt diesem Typ: { depth: number; slug: string; text: string }[]
.
rawContent()
Abschnitt betitelt rawContent()Eine Funktion, die den unverarbeiteten Markdown-Quellcode (ohne den Frontmatter-Block) als String zurückgibt. Dies ist hilfreich, wenn du z. B. die Lesezeit
eines Beitrags berechnen willst. Dieses Beispiel verwendet das beliebte Paket reading-time
:
compiledContent()
Abschnitt betitelt compiledContent()Eine asynchrone Funktion, die das Ergebnis der Umwandlung deines Markdown-Quellcodes zu Astro-Quellcode zurückgibt. Hinweis: An diesem Punkt wurden noch keine {JSX-Ausdrücke}
, <Komponenten />
oder Layouts verarbeitet! Nur Standard-Markdown-Blöcke wie ## Überschriften
und - Listen
wurden in HTML umgewandelt. Dies ist z. B. nützlich, wenn du Zusammenfassungen für Blogbeiträge rendern willst. Da die Astro-Syntax gültiges HTML ist, können beliebte Bibliotheken wie node-html-parser eingesetzt werden, um den ersten Absatz des Beitrags abzufragen:
Content
Abschnitt betitelt ContentEine Komponente, die den vollständigen gerenderten Inhalt der Markdown-Datei zurückgibt. Hier ein Beispiel:
Wenn du getStaticPaths
und Astro.glob()
verwendest, um Seiten aus Markdown-Dateien zu generieren, kannst du props
verwenden, um die <Content/>
-Komponente an die generierte Seite zu übergeben. Anschließend kannst du die Komponente aus Astro.props
abrufen und in deiner Vorlage rendern.
Markdown-Komponente
Abschnitt betitelt Markdown-KomponenteDie <Markdown />
-Komponente funktioniert nicht in SSR und wird vor v1.0 in ein eigenes Paket verschoben. Verwende stattdessen unsere Funktionalität zum Importieren von Markdown.
Du kannst Astros integrierte Markdown-Komponente in dein Komponentenskript importieren und dann beliebigen Markdown-Code zwischen die Tags <Markdown></Markdown>
schreiben.
Externer Markdown-Inhalt
Abschnitt betitelt Externer Markdown-InhaltDie <Markdown />
-Komponente funktioniert nicht in SSR und wird vor v1.0 in ein eigenes Paket verschoben. Verwende stattdessen unsere Funktionalität zum Importieren von Markdown.
Falls du Markdown-Inhalt aus einer externen Quelle geladen hast, kannst du diesen über das content
-Attribut direkt an die Markdown-Komponente übergeben.
Verschachtelter Markdown-Inhalt
Abschnitt betitelt Verschachtelter Markdown-InhaltDie <Markdown />
-Komponente funktioniert nicht in SSR und wird vor v1.0 in ein eigenes Paket verschoben. Verwende stattdessen unsere Funktionalität zum Importieren von Markdown.
<Markdown />
-Komponenten können verschachtelt werden.
Die Verwendung der Markdown
-Komponente zum Rendern von Markdown aus externen Quellen kann deine Seite für Cross-Site-Scripting (XSS)-Angriffe verwundbar machen. Falls du nicht vertrauenswürdige Inhalte rendern willst, stelle sicher, dass du sie bereinigst, bevor du sie renderst.
Markdown konfigurieren
Abschnitt betitelt Markdown konfigurierenAstros Markdown-Unterstützung basiert auf remark, einem leistungsstarken Werkzeug zum Parsen und Verarbeiten von Markdown mit einem aktiven Ökosystem. Andere Markdown-Parser wie Pandoc oder markdown-it werden derzeit nicht unterstützt.
Über die Datei astro.config.mjs
kannst du anpassen, wie remark deinen Markdown-Code parsen soll. Lies unsere Konfigurationsreferenz (EN) für eine vollständige Liste aller Optionen, oder folge der untenstehenden Anleitung, um zu erfahren, wie du Plugins hinzufügen und die Syntaxhervorhebung anpassen kannst.
Markdown-Plugins
Abschnitt betitelt Markdown-PluginsDie Markdown-Verarbeitung in Astro kann durch Drittanbieter-Plugins für remark und rehype erweitert werden. Du kannst deine Plugins in astro.config.mjs
bereitstellen.
Die Aktivierung eigener remarkPlugins
oder rehypePlugins
entfernt die von Astro standardmäßig verwendeten Plugins. Falls du diese weiterhin verwenden willst, musst du sie explizit hinzufügen.
Die von Astro standardmäßig verwendeten Plugins sind GitHub-flavored Markdown und remark-smartypants.
So fügst du ein Markdown-Plugin zu Astro hinzu
Abschnitt betitelt So fügst du ein Markdown-Plugin zu Astro hinzu-
Verwende deinen Paketmanager, um das NPM-Paket des Plugins zu deinem Projekt hinzuzufügen.
-
Aktualisiere die Felder
remarkPlugins
oderrehypePlugins
in Astros Konfigurationsoptionen:Du kannst Plugins entweder über ihren Namen hinzufügen oder sie importieren:
Syntaxhervorhebung
Abschnitt betitelt SyntaxhervorhebungAstro unterstützt von Haus aus Shiki und Prism und ermöglicht so die Syntaxhervorhebung in folgenden Bereichen:
- Mit Code-Zäunen (```) umgebene Inhalte innerhalb von Markdown-Dateien (
.md
) und der eingebauten<Markdown />
-Komponente. - Inhalte innerhalb der eingebauten
<Code />
-Komponente (basierend auf Shiki) oder der<Prism />
-Komponente (basierend auf Prism).
Shiki ist standardmäßig aktiviert und mit dem Design github-dark
vorkonfiguriert. Die kompilierte Ausgabe wird auf Inline-Stile ohne überflüssige CSS-Klassen, Stylesheets oder clientseitigen JavaScript-Code beschränkt.
Falls du dich für die Verwendung von Prism entscheidest, verwenden wir stattdessen die CSS-Klassen von Prism. Bitte beachte, dass du in diesem Fall dein eigenes CSS-Stylesheet mitbringen musst, damit die Syntaxhervorhebung angezeigt wird! Weitere Einzelheiten findest du im Abschnitt zur Prism-Konfiguration.
Wähle eine Syntaxhervorhebung
Abschnitt betitelt Wähle eine SyntaxhervorhebungShiki ist unsere Standard-Syntaxhervorhebung. Wenn du zu Prism
wechseln oder die Syntaxhervorhebung vollständig deaktivieren möchtest, kannst du das Konfigurationsobjekt markdown
verwenden:
Shiki-Konfiguration
Abschnitt betitelt Shiki-KonfigurationWenn du Shiki verwendest, kannst du alle Optionen wie folgt über das Objekt shikiConfig
konfigurieren:
Wir empfehlen dir auch, bei Gelegenheit in Shikis Theme-Dokumentation einzutauchen, um mehr über das Laden von benutzerdefinierten Themen, das Umschalten zwischen Hell- und Dunkelmodus oder das Styling über CSS-Variablen zu erfahren.
Prism-Konfiguration
Abschnitt betitelt Prism-KonfigurationWenn du Prism verwenden willst, musst du ein Stylesheet zur Syntaxhervorhebung zu deinem Projekt hinzufügen. Wenn du gerade erst anfängst und Prism gegenüber Shiki bevorzugst, empfehlen wir dir folgende Vorgehensweise:
- Stelle
syntaxHighlight: 'prism'
in deiner Astro-Konfigurationsdatei ein. - Wähle ein vorgefertigtes Stylesheet auf Prism Themes aus und lade es herunter.
- Füge dieses Stylesheet in das
public/
-Verzeichnis deines Projekts ein. - Lade es im
<head>
-Abschnitt deiner Seite mit einem<link>
-Tag.
Du kannst auch die Liste der von Prism unterstützten Sprachen besuchen, um mehr über die Optionen und deren Verwendung zu erfahren.
Learn