Markdown & MDX
Le Markdown est couramment utilisé pour créer des contenus à forte teneur en texte, tels que des articles de blog et de la documentation. Astro inclut une prise en charge intégrée des fichiers Markdown standard qui peuvent également inclure un frontmatter YAML pour définir des métadonnées personnalisées telles qu’un titre, une description et des balises.
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
Collections de contenu
Vous pouvez gérer vos fichiers Markdown et MDX dans Astro dans un dossier spécial src/content/
. Les collections de contenu vous aident à organiser votre contenu, à valider vos frontmatter et fournir un type-safety TypeScript automatique lorsque que vous travaillez sur votre contenu.
Répertoiresrc/content/
Répertoirenewsletter/
- week-1.md
- week-2.md
Répertoireauthors/
- grace-hopper.md
- alan-turing.md
Pour en savoir plus sur l’utilisation des collections de contenu dans Astro.
Routage basé sur les fichiers
Astro 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.
Fonctionnalités de Markdown
Astro offre quelques fonctions Markdown supplémentaires intégrées, disponibles lors de l’utilisation de fichiers Markdown et MDX.
Frontmatter layout
Astro fournit aux pages Markdown et MDX une propriété spéciale layout
qui peut spécifier un chemin relatif (ou alias) vers un composant de mise en page Astro.
Les propriétés spécifiques sont alors disponibles pour le composant de mise en page à travers Astro.props
. Par exemple, vous pouvez accéder aux propriétés du frontmatter par l’intermédiaire de Astro.props.frontmatter
:
Vous pouvez également styliser votre Markdown (EN) dans votre composant de mise en page.
📚 En savoir plus sur les mises en page Markdown.
Identifiants d’En-tête
L’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.
Astro génère des id
s de rubrique basés sur github-slugger
. Vous pouvez trouver plus d’exemples dans la documentation de github-slugger.
Caractères spéciaux d’échappement
Certains 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
L’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
.
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
MDX 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
L’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
Aprè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
Avec 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
Vous 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
Voir les propriétés exportées vers un composant de mise en page Astro en utilisant la mise en page spéciale d’Astro pour le frontmatter.
Les 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
Importer Content
pour rendre un composant qui renvoie le contenu complet d’un fichier Markdown ou MDX :
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
Les 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é
Lors du rendu d’un contenu MDX importé, les composants personnalisés peuvent être passés via la propriété components
.
Les composants personnalisés définis et exportés dans un fichier MDX doivent être importés et renvoyés au composant <Content />
via la propriété components
.
Configuration de Markdown et MDX
La 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 (EN).
Plugins Markdown
Astro 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 (EN).
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
Astro 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
Pour 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
Si vous utilisez des collections de contenus, veuillez consulter “Modifier le frontmatter avec Remark ”.
Vous 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 :
astro@2.0.0
data.astro.frontmatter
contient toutes les propriétés d’un document Markdown ou MDX donné. Cela vous permet de modifier les propriétés existantes du frontmatter, ou de calculer de nouvelles propriétés à partir de ce frontmatter existant.
-
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
Extension de la configuration Markdown à partir de MDX
L’intégration MDX d’Astro étend par défaut la configuration Markdown existante de votre projet (EN). 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
Astro 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
Shiki 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
Au 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
Si 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
Si 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
Astro 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 (EN)).
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.
Learn