Aller au contenu principal

Surcharger la génération des balises img avec Docusaurus

Apprenez à personnaliser le rendu des balises <img> dans Docusaurus pour mieux contrôler la sortie des images.

· 3 minutes de lecture
Voir la source
Christophe
Amoureux de Markdown, WSL et Docker ~ Curieux insatiable.
Cet article existe aussi en anglais — lire la version originale.

Traduction automatique

Cette traduction a été produite par une IA. Elle peut contenir des contresens ou des maladresses, en particulier sur les termes techniques. En cas de doute, consultez l'article de référence en anglais — c'est lui qui fait foi.

Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.

Cet article fait partie de la série Créer des composants Docusaurus :

Surcharger la génération des balises img avec Docusaurus

⚡
TL;DR

Cet article propose une solution simple pour activer le lazy loading des images dans Docusaurus et améliorer les performances. Il explique comment intercepter le rendu par défaut des balises <img> en personnalisant le fichier src/theme/MDXComponents.js. Avec un simple mapping, vous pouvez forcer le chargement différé de toutes les images et même appliquer des styles personnalisés, sans avoir à créer un composant ou un plugin complexe.

En cherchant de bons trucs et astuces sur Docusaurus quand le nombre d'articles devient important, j'ai lu qu'il fallait faire attention au lazy loading des images et, en effet, par défaut toutes les images sont chargées dès le premier accès à un article de blog.

Dans cet article, nous allons voir à quel point il est facile d'intercepter la création de la balise <img> lorsque le contenu Markdown est converti en HTML.

Cette conversion se produit à deux endroits : quand vous naviguez sur votre site ou quand vous générez une version statique de celui-ci.

Pour faire ça, en fait, pas besoin de créer un composant ! Il suffit d'ajouter quelques lignes de code dans le fichier src/theme/MDXComponents.js. Si vous avez besoin de plus que deux ou trois attributs supplémentaires — un div wrapper, du CSS personnalisé, un effet de zoom — alors un vrai composant s'impose ; c'est le sujet de Modifier la façon dont Docusaurus génère les balises img.

Si vous n'avez pas encore ce fichier, créez-le.

Remarque

La notation // [...] est un marqueur pour vous montrer que vous aurez peut-être déjà quelques lignes de code à cet endroit. Ne la supprimez pas ; ajoutez simplement les lignes surlignées comme ci-dessous.

import React from "react";
import MDXComponents from "@theme-original/MDXComponents";
// [...]
export default {
// Reusing the default mapping
...MDXComponents,
// highlight-start
img: (props) => {
const { loading, decoding, className, style, height, width, ...rest } = props;
return (
<img
{...rest}
// Make sure to keep "height='auto'" (so also disable width) as generated by Docusaurus
// We shouldn't display the image at full size
height='auto'
width=''
loading={loading || 'lazy'}
decoding={decoding || 'async'}
className={`${className || ''}`}
// Example of how adding extra CSS
style={{
border: '20px solid #ccc',
borderRadius: '6px',
...style,
}}
/>
);
},
// highlight-end
// [...]
};

Ce fichier exporte une configuration de composants MDX personnalisés pour Docusaurus. Il réutilise tous les composants par défaut et remplace spécifiquement le composant img pour ajouter des attributs de chargement optimisé et un style de bordure personnalisé à toutes les images du contenu.

Une fois l'ajout fait dans votre fichier MDXComponents.js, retournez dans le navigateur ; ouvrez n'importe quel article et rafraîchissez la page. Vous verrez que les images ont maintenant l'attribut loading="lazy" (vous pouvez le vérifier avec le panneau des outils de développement de votre navigateur). Si, comme dans l'exemple donné ci-dessus, vous avez ajouté du style CSS, vous le verrez immédiatement.

Facile, non ?

Maintenant, comment s'assurer que ça reste vrai sur deux cents articles ? En le vérifiant automatiquement : voyez Quelques vérifications sur les images de votre site Docusaurus.


Cet article fait partie de la série Créer des composants Docusaurus :
🦋 Rejoignez la conversation sur BlueskyUn compte Bluesky gratuit est nécessaire pour aimer, repartager ou commenter. Ce bloc interroge l'API publique de Bluesky directement depuis votre navigateur (sans cookie, sans connexion) — votre adresse IP parvient donc aux serveurs de Bluesky dès que cette section se charge.

Chargement des commentaires…

Cet article vous a-t-il été utile ?
Avez-vous suivi les étapes de cet article ?