Markdown & MDX
Le Markdown est généralement utilisé pour écrire du contenu contenant beaucoup de texte, comme des articles de blog et de documentation. Astro inclut un support intégré pour les fichiers Markdown standards.
Avec l’intégration @astrojs/mdx (EN) installée, Astro supporte aussi les fichiers MDX (.mdx
) qui apportent des fonctionnalités supplémentaires, telles que la prise en charge des expressions et des composants JavaScript dans votre contenu Markdown.
Utilisez l’un ou les deux types de fichiers pour écrire du contenu Markdown !
Pages Markdown et MDX
Section titled Pages Markdown et MDXCollections de contenu
Section titled Collections de contenuVous pouvez gérer vos fichiers Markdown et MDX dans Astro dans un dossier spécial src/content/
. Les collections de contenu (EN) vous aident à organiser votre contenu, à valider vos frontmatter et fournir un type-safety TypeScript automatique lorsque que vous travaillez sur votre contenu.
Directorysrc/content/
Directorynewsletter/
- week-1.md
- week-2.md
Directoryauthors/
- grace-hopper.md
- alan-turing.md
Pour en savoir plus sur l’utilisation des collections de contenu dans Astro (EN).
Routage basé sur les fichiers
Section titled Routage basé sur les fichiersAstro traite n’importe quel fichier .md
(ou une autre extension prise en charge) ou .mdx
à l’intérieur du répertoire /src/pages/
comme une page.
Placer un fichier dans ce répertoire, ou dans un sous-répertoire, construira automatiquement une route vers cette page en utilisant le chemin du fichier.
📚 En savoir plus sur le routage basé sur les fichiers d’Astro ou les options pour créer des routes dynamiques.
Pages Brouillons
Section titled Pages Brouillonsdraft: true
est une valeur optionnelle dans le frontmatter qui marquera une page ou un post Markdown ou MDX individuel comme “non publié”. Par défaut, cette page sera :
- exclue du site construit (aucune page ne sera build)
- retournée par
Astro.glob()
(EN) (visible dans les listes d’articles)
Pour exclure les brouillons d’articles d’une archive d’articles, ou d’une liste d’articles les plus récents, vous pouvez filtrer les résultats obtenus par Astro.glob()
:
Activer la compilation des pages brouillons
Section titled Activer la compilation des pages brouillonsPour activer la compilation des pages brouillons par défaut, modifiez astro.config.mjs
en ajoutant drafts: true
au markdown
ou à l’intégration mdx
:
Fonctionnalités de Markdown
Section titled Fonctionnalités de MarkdownAstro fournit des fonctionnalités intégrées Markdown supplémentaires, disponibles lors de l’utilisation de fichiers Markdown et MDX.
Frontmatter layout
Section titled Frontmatter layoutAstro fournit aux pages Markdown et MDX une propriété spéciale layout
pour le frontmatter, qui permet de spécifier un chemin relatif (ou alias à un composant de mise en page Astro.
Des propriétés spécifiques sont alors disponibles pour le composant de mise en page via Astro.props
. Par exemple, vous pouvez accéder aux propriétés de frontmatter par Astro.props.frontmatter
:
Vous pouvez également donner du style à votre Markdown dans votre composant de mise en page.
📚 En savoir plus à propos des Layouts Markdown.
Identifiants d’En-tête
Section titled Identifiants d’En-têteL’utilisation d’en-tête en Markdown et MDX va automatiquement vous donner des liens d’ancrage afin que vous puissiez accéder directement à certaines sections de votre page.
Caractères spéciaux d’échappement
Section titled Caractères spéciaux d’échappementCertains caractères ont une signification spéciale en Markdown et MDX. Vous devez utiliser une syntaxe différente si vous souhaitez les afficher. Pour ce faire, vous pouvez utiliser les entités HTML à la place de ces caractères.
Par exemple, pour prévenir <
d’être interprété comme le début d’une base HTML, écrivez <
. Ou, pour prévenir {
d’être interprété comme le début d’une expression JavaScript en MDX, écrivez {
.
Fonctionnalités MDX uniquement
Section titled Fonctionnalités MDX uniquementL’ajout de l’intégration Astro MDX (EN) améliore votre création de Markdown avec des variables, des expressions et des composants JSX.
Il ajoute aussi des fonctionnalités supplémentaires au MDX standard, notamment la prise en charge du frontmatter de style Markdown dans MDX. Cela vous permet d’utiliser la plupart des fonctionnalités Markdown intégrées d’Astro, comme la propriété de frontmatter layout
et un paramètre pour les pages brouillons.
Les fichiers .mdx
doivent être écrit dans la syntaxe MDX plutôt que dans la syntaxe de type HTML d’Astro.
Utilisation de variables exportées dans MDX
Section titled Utilisation de variables exportées dans MDXMDX permet d’utiliser l’instruction export
pour ajouter des variables dans votre contenu MDX. Ces variables sont accessibles à la fois dans le modèle lui-même et comme propriétés nommées lors de l’importation du fichier à un autre endroit.
Par exemple, vous pouvez exporter un champ title
depuis une page ou un composant MDX pour l’utiliser en tant qu’en-tête avec les {expressions JSX}
:
Utilisation de variables frontmatter en MDX
Section titled Utilisation de variables frontmatter en MDXL’intégration MDX d’Astro inclut le support pour l’utilisation par défaut de frontmatter en MDX. Ajoutez les propriétés de frontmatter comme vous le feriez dans des fichiers Markdown, et ces variables sont accessibles pour être utilisées dans la template, dans son composant layout
, et comme propriétés nommées lors de l’importation du fichier ailleurs.
Utilisation des composants en MDX
Section titled Utilisation des composants en MDXAprès avoir installé l’intégration MDX, vous pouvez importer et utiliser les composants Astro et les composants de framework d’interface utilisateur dans des fichiers MDX (.mdx
) comme vous le feriez avec n’importe quel autre composant Astro.
N’oubliez pas d’inclure une client:directive
sur les composants de votre framework d’interface utilisateur, si nécessaire !
Vous trouverez d’autres exemples d’utilisation des instructions d’importation et d’exportation dans la documentation MDX.
Affectation de composants personnalisés à des éléments HTML
Section titled Affectation de composants personnalisés à des éléments HTMLAvec MDX, vous pouvez associer la syntaxe Markdown à des composants personnalisés au lieu de leurs éléments HTML standard. Cela vous permet d’écrire dans la syntaxe Markdown standard, mais d’appliquer un style de composant spécial aux éléments sélectionnés.
Importez votre composant personnalisé dans votre fichier .mdx
, puis exportez un objet components
qui fait correspondre l’élément HTML standard à votre composant personnalisé :
Consultez le site Web MDX pour obtenir la liste complète des éléments HTML qui peuvent être remplacés par des composants personnalisés.
Importer du contenu Markdown
Section titled Importer du contenu MarkdownVous pouvez importer des fichiers Markdown et MDX directement dans vos fichiers Astro. Cela vous donne accès à leur contenu Markdown, ainsi qu’à d’autres propriétés telles que les valeurs frontmatter qui peuvent être utilisées dans les expressions de type JSX d’Astro.
Vous pouvez importer une page spécifique avec une déclaration import
ou plusieurs avec Astro.glob()
.
Quand vous importez des fichiers Markdown et MDX dans un composant Astro, vous obtenez un objet contenant leurs propriétés exportées.
Dans les fichiers MDX, vous pouvez accéder aux propriétés depuis le frontmatter et la déclaration export
:
Vous pouvez éventuellement fournir un type pour la variable frontmatter
en utilisant un générique TypeScript :
Propriétés exportées
Section titled Propriétés exportéesLes propriétés suivantes sont disponibles pour un composant .astro
lorsqu’il utilise une instruction import
ou Astro.glob()
:
file
- Le chemin absolu vers le fichier (par exemple/home/user/projects/.../file.md
).url
- S’il s’agit d’une page, l’URL de la page (e.g./fr/guides/markdown-content
).frontmatter
- Contient toutes les données spécifiées dans le frontmatter YAML du fichier.getHeadings
- Une fonction asynchrone qui retourne un tableau de tous les titres (c.-à-d. les élémentsh1 -> h6
) du fichier. Leslug
de chaque titre correspond à l’identifiant généré pour un titre donné et peut être utilisé pour les liens d’ancrage. Cette liste suit le type :{ depth: number; slug: string; text: string }[]
.Content
- Un composant qui renvoie le contenu complet et rendu du fichier.- (Markdown uniquement)
rawContent()
- Une fonction qui renvoie le document Markdown brut sous forme de chaîne de caractères. - (Markdown uniquement)
compiledContent()
- Une fonction qui renvoie le document Markdown compilé en une chaîne HTML. Notez que cela n’inclut pas les mises en page configurées dans votre frontmatter ! Seul le document markdown lui-même sera renvoyé au format HTML. - (MDX uniquement) - Les fichiers MDX peuvent également exporter des données à l’aide de l’instruction
export
.
Le composant Content
Section titled Le composant ContentImporter Content
pour rendre un composant qui renvoie le contenu complet d’un fichier Markdown ou MDX :
Exemple : Routage dynamique des pages
Section titled Exemple : Routage dynamique des pagesÀ la place de mettre vos fichiers Markdown/MDX dans le dossier src/pages/
pour créer des routes de pages, vous pouvez générer des pages dynamiquement.
Pour accéder à votre contenu Markdown, passez le composant <Content/>
à travers le props
de la page Astro. Vous pouvez alors récupérer le composant dans Astro.props
et le rendre dans votre template.
Exportations MDX uniquement
Section titled Exportations MDX uniquementLes fichiers MDX peuvent aussi exporter des données avec l’instruction export
.
Par exemple, vous pouvez exporter un champ title
depuis une page ou un composant MDX.
Ce title
sera accessible depuis les instructions import
et Astro.glob() (EN) :
Composants personnalisés avec du MDX importé
Section titled Composants personnalisés avec du MDX importéLors du rendu d’un contenu MDX importé, les composants personnalisés peuvent être passés via la propriété components
.
Configuration de Markdown et MDX
Section titled Configuration de Markdown et MDXLa prise en charge du Markdown dans astro est géré par remark, un outil puissant de parsing et de traitement doté d’un écosystème actif. D’autres parser de Markdown comme Pandoc et markdown-it ne sont pas supportés actuellement.
Astro applique par défaut les plugins Markdown de GitHub et SmartyPants. Cela permet de générer des liens cliquables à partir du texte et de mettre en forme les citations et les em-dashes.
Vous pouvez personnaliser la façon dont remark parse votre Markdown dans astro.config.mjs
. Voir la liste complète des options de configuration Markdown.
Plugins Markdown
Section titled Plugins MarkdownAstro prend en charge l’ajout de plugins tiers remark et rehype pour Markdown et MDX. Ces plugins vous permettent d’ajouter de nouvelles fonctionnalités à votre Markdown, comme la génération automatique d’une table des matières, appliquer des étiquettes d’émoji accessibles et styliser votre markdown.
Nous vous encourageons à consulter awesome-remark et awesome-rehype pour les plugins populaires ! Lisez le README de chaque plugin pour connaitre les instructions d’installation spécifiques.
Cet exemple applique remark-toc
et rehype-accessible-emojis
aux fichiers Markdown et MDX :
Notez que par défaut, remarkToc
nécessite un titre “ToC” ou “Table des matières” (insensible à la casse) sur la page pour afficher la table des matières.
ID de titres et plugins
Section titled ID de titres et pluginsAstro injecte un attribut id
dans tous les éléments titre (<h1>
à <h6>
) dans les fichiers Markdown et MDX et fournit un utilitaire getHeadings()
pour récupérer ces identifiants dans les propriétés Markdown exportées.
Vous pouvez personnaliser les ID de ces titres en ajoutant un plugin rehype qui injecte les attributs id
(par exemple rehype-slug
). Vos ID personnalisés, au lieu des valeurs par défaut d’Astro, seront reflétés dans la sortie HTML et dans les éléments retournés par getHeadings()
.
Par défaut, Astro injecte les attributs id
après l’exécution de vos plugins rehype. Si l’un de vos plugins rehype personnalisés a besoin d’accéder aux ID injectés par Astro, vous pouvez importer et utiliser directement le plugin rehypeHeadingIds
d’Astro. Assurez-vous d’ajouter rehypeHeadingIds
avant tous les plugins qui en dépendent :
Personnaliser un plugin
Section titled Personnaliser un pluginPour personnaliser un plugin, il faut lui fournir un objet options
dans un tableau imbriqué.
L’exemple ci-dessous ajoute l’option de titres au plugin remarkToc
pour modifier l’emplacement de la table des matières, et l’option behavior
au plugin rehype-autolink-headings
afin d’ajouter la balise d’ancrage après le texte du titre.
Modifier le frontmatter par un programme
Section titled Modifier le frontmatter par un programmeVous pouvez ajouter des propriétés frontmatter à tout vos fichiers Markdown et MDX en utilisant un plugin remark ou rehype.
- Ajoutez un
customProperty
à la propriétédata.astro.frontmatter
de l’argumentfile
de votre plugin :
- Appliquez ce plugin à votre configuration d’intégration
markdown
oumdx
:
ou
Désormais, chaque fichier Markdown ou MDX contiendra customProperty
dans son frontmatter, ce qui le rendra disponible lors de l’importation de votre markdown et depuis la propriété Astro.props.frontmatter
dans vos layouts
Exemple : calculer le temps de lecture
Section titled Exemple : calculer le temps de lectureVous pouvez utiliser un plugin remark pour ajouter un temps de lecture à votre frontmatter. Nous recommandons deux packages d’aide :
reading-time
pour calculer les minutes de lecturemdast-util-to-string
pour extraire tout le texte de votre markdown
Nous pouvons appliquer ces packages à un plugin remark comme ci-après :
Une fois que vous avez appliqué ce plugin à votre configuration:
…tous les documents Markdown auront une valeur calculée minutesRead
. Vous pouvez l’utiliser pour inclure une bannière “X min de lecture” dans une mise en page markdown, par exemple :
Extension de la configuration Markdown à partir de MDX
Section titled Extension de la configuration Markdown à partir de MDXL’intégration MDX d’Astro étend par défaut la configuration Markdown existante de votre projet. Pour remplacer des options individuelles, vous pouvez spécifier leur équivalent dans votre configuration MDX.
L’exemple suivant désactive le Markdown de Github et applique un panel différent de plugins remark pour les fichiers MDX :
Pour éviter d’étendre votre configuration Markdown à partir de MDX, mettez l’option extendMarkdownConfig
(EN) (activée par défaut) à false
:
Coloration syntaxique
Section titled Coloration syntaxiqueAstro supporte nativement Shiki et Prism. Cela vous permet de profiter de la coloration syntaxique pour :
- tous les blocs de code (```) utilisés dans un fichier Markdown ou MDX.
- le contenu dans le composant natif
<Code />
(EN) (géré par Shiki). - le contenu dans le composant
<Prism />
(EN) (géré par Prism).
Shiki est activé par défaut, préconfiguré avec le thème github-dark
. Le code compilé sera limité à des styles
intégrés au HTML sans aucune classe CSS supplémentaire, ni feuilles de styles, ou JS sur le client.
Configuration de Shiki
Section titled Configuration de ShikiShiki est notre colorateur syntaxique par défaut. Vous pouvez configurer toutes les options via l’objet shikiConfig
comme ci-après :
Ajouter votre propre thème
Section titled Ajouter votre propre thèmeAu lieu d’utiliser l’un des thèmes prédéfinis de Shiki, vous pouvez importer un thème personnalisé à partir d’un fichier local.
Nous vous conseillons également de lire la documentation de Shiki sur les thèmes personnalisés pour en savoir plus sur les thèmes, les modes clair et sombre, ou le style via les variables CSS.
Modifier le mode par défaut de coloration syntaxique
Section titled Modifier le mode par défaut de coloration syntaxiqueSi vous souhaitez utiliser 'prism'
par défaut, ou désactiver la coloration syntaxique entièrement, vous pouvez utiliser l’objet de configuration markdown.syntaxHighlighting
:
Configuration de Prism
Section titled Configuration de PrismSi vous choisissez d’utiliser Prism, Astro appliquera les classes CSS de Prism à la place. Notez que vous devez apporter votre propre feuille de style CSS pour que la coloration syntaxique apparaisse !
- Choisissez une feuille de style prédéfinie parmi les Thèmes Prism disponibles.
- Ajouter cette feuille de styles dans le répertoire
public/
de votre projet. - Chargez-la dans la balise
<head>
de votre page dans un composant de feuille de style via une balise<link>
. (Voir utilisation basique de Prism.)
Vous pouvez aussi visiter la liste des langages supportés par Prism pour les options et leur usage.
Récupérer du Markdown distant
Section titled Récupérer du Markdown distantAstro a été principalement conçu pour les fichiers Markdown locaux qui peuvent être enregistrés dans le répertoire de votre projet. Toutefois, dans certains cas, il peut être nécessaire de récupérer le code Markdown à partir d’une source distante. Par exemple, vous pouvez avoir besoin de récupérer et de rendre du Markdown à partir d’une API distante lorsque vous compilez votre site web (ou lorsqu’un utilisateur fait une demande sur votre site web, en utilisant le SSR).
Astro ne comprend pas de support intégré pour le Markdown à distance ! Pour récupérer un fichier Markdown distant et le rendre au format HTML, vous devrez installer et configurer votre propre parser Markdown à partir de npm. Celui-ci n’héritera pas des paramètres intégrés Markdown et MDX d’Astro que vous avez configurés. Assurez-vous de bien comprendre ces limitations avant de l’intégrer à votre projet.