Aller au contenu principal
Version : 3.7.0

Autogenerated

Docusaurus peut crĂ©er une barre latĂ©rale automatiquement Ă  partir de votre structure de systĂšme de fichiers : chaque dossier crĂ©e une catĂ©gorie de barre latĂ©rale et chaque fichier crĂ©e un lien de documentation.

type SidebarItemAutogenerated = {
type: 'autogenerated';
dirName: string; // Dossier source pour générer la barre latérale (relative à docs)
};

Docusaurus peut générer une barre latérale complÚte à partir de votre dossier docs :

sidebars.js
export default {
myAutogeneratedSidebar: [
{
type: 'autogenerated',
dirName: '.', // '.' signifie le dossier docs actuel
},
],
};

Un Ă©lĂ©ment autogenerated est converti par Docusaurus en une section de barre latĂ©rale (Ă©galement abordĂ©e dans raccourci de catĂ©gorie)  : une liste d'Ă©lĂ©ments de type doc ou category, de sorte que vous pouvez Ă©clater plusieurs Ă©lĂ©ments autogenerated depuis plusieurs rĂ©pertoires, en les intercalant avec des Ă©lĂ©ments de barre latĂ©rale ordinaires, dans un seul niveau de barre latĂ©rale.

Un exemple réel

ConsidĂ©rer cette structure de fichiers :

docs
├── api
│ ├── product1-api
│ │ └── api.md
│ └── product2-api
│ ├── basic-api.md
│ └── pro-api.md
├── intro.md
└── tutorials
├── advanced
│ ├── advanced1.md
│ ├── advanced2.md
│ └── read-more
│ ├── resource1.md
│ └── resource2.md
├── easy
│ ├── easy1.md
│ └── easy2.md
├── tutorial-end.md
├── tutorial-intro.md
└── tutorial-medium.md

Supposons que chaque identifiant de la documentation ne soit que son nom de fichier. Si vous dĂ©finissez une barre latĂ©rale gĂ©nĂ©rĂ©e automatiquement comme ceci :

sidebars.js
export default {
mySidebar: [
'intro',
{
type: 'category',
label: 'Tutorials',
items: [
'tutorial-intro',
{
type: 'autogenerated',
dirName: 'tutorials/easy', // GénÚre une barre latérale à partir de docs/tutorials/easy
},
'tutorial-medium',
{
type: 'autogenerated',
dirName: 'tutorials/advanced', // GénÚre une barre latérale à partir de docs/tutorials/advanced
},
'tutorial-end',
],
},
{
type: 'autogenerated',
dirName: 'api', // GénÚre une barre latérale à partir de docs/api
},
{
type: 'category',
label: 'Community',
items: ['team', 'chat'],
},
],
};

Elle serait rĂ©solue ainsi :

sidebars.js
export default {
mySidebar: [
'intro',
{
type: 'category',
label: 'Tutorials',
items: [
'tutorial-intro',
// Deux fichiers dans docs/tutorials/easy
'easy1',
'easy2',
'tutorial-medium',
// Deux fichiers et un dossier dans docs/tutorials/advanced
'advanced1',
'advanced2',
{
type: 'category',
label: 'read-more',
items: ['resource1', 'resource2'],
},
'tutorial-end',
],
},
// Deux dossiers dans docs/api
{
type: 'category',
label: 'product1-api',
items: ['api'],
},
{
type: 'category',
label: 'product2-api',
items: ['basic-api', 'pro-api'],
},
{
type: 'category',
label: 'Community',
items: ['team', 'chat'],
},
],
};

Notez que les rĂ©pertoires de sources gĂ©nĂ©rĂ©s automatiquement ne deviennent pas des catĂ©gories : seuls les Ă©lĂ©ments qu'ils contiennent le sont. C'est ce que nous entendons par « section de barre latĂ©rale Â».

Convention d'indexation des catĂ©gories​

Docusaurus peut lier automatiquement une catégorie à son document d'index.

Un document d'index de catĂ©gorie est un document qui suit l'une de ces conventions de nom de fichier :

  • NommĂ© comme index (insensible Ă  la casse) : docs/Guides/index.md
  • NommĂ© comme README (insensible Ă  la casse) : docs/Guides/README.mdx
  • MĂȘme nom que le dossier parent : docs/Guides/Guides.md

Cela revient Ă  utiliser une catĂ©gorie avec un lien de doc :

sidebars.js
export default {
docs: [
{
type: 'category',
label: 'Guides',
link: {type: 'doc', id: 'Guides/index'},
items: [],
},
],
};
astuce

Le fait de nommer votre document d'introduction README.md le fait apparaßtre lorsque vous parcourez le dossier à l'aide de l'interface GitHub, tandis que l'utilisation de index.md rend le comportement plus conforme à la façon dont les fichiers HTML sont servis.

astuce

Si un dossier n'a qu'une page d'index, il sera transformĂ© en lien au lieu d'une catĂ©gorie. Ceci est utile pour la collocation des ressources :

some-doc
├── index.md
├── img1.png
└── img2.png
Personnalisation de l'indexation des catégories

Il est possible d'exclure n'importe laquelle des conventions de l'index des catégories, ou de définir encore plus de conventions. Vous pouvez injecter votre propre isCategoryIndex dans le callback sidebarItemsGenerator. Par exemple, vous pouvez également choisir intro comme autre nom de fichier éligible pour devenir automatiquement l'index de la catégorie.

docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
...args,
isCategoryIndex: defaultCategoryIndexMatcher, // L'implémentation par défaut du sélecteur, donnée ci-dessous
defaultSidebarItemsGenerator,
}) {
return defaultSidebarItemsGenerator({
...args,
isCategoryIndex(doc) {
return (
// Choisissez également intro.md en plus de ceux par défaut
doc.fileName.toLowerCase() === 'intro' ||
defaultCategoryIndexMatcher(doc)
);
},
});
},
},
],
],
};

Ou choisir de ne pas avoir de convention d'index de catégorie.

docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
...args,
isCategoryIndex: defaultCategoryIndexMatcher, // L'implémentation par défaut du sélecteur, donnée ci-dessous
defaultSidebarItemsGenerator,
}) {
return defaultSidebarItemsGenerator({
...args,
isCategoryIndex() {
// Aucun doc ne sera automatiquement choisi comme index de catégorie
return false;
},
});
},
},
],
],
};

Le sĂ©lecteur isCategoryIndex sera fournie avec trois champs :

  • fileName, le nom du fichier sans extension et avec la casse prĂ©servĂ©e
  • directories, la liste des noms de rĂ©pertoires du niveau le plus bas au niveau le plus haut, par rapport au rĂ©pertoire racine des docs
  • extension, l'extension du fichier, avec un point au dĂ©but.

Par exemple, pour un fichier doc guides/sidebar/autogenerated.md, les props que le sélecteur reçoit sont

const props = {
fileName: 'autogenerated',
directories: ['sidebar', 'guides'],
extension: '.md',
};

L'implĂ©mentation par dĂ©faut est :

function isCategoryIndex({fileName, directories}) {
const eligibleDocIndexNames = [
'index',
'readme',
directories[0].toLowerCase(),
];
return eligibleDocIndexNames.includes(fileName.toLowerCase());
}

MĂ©tadonnĂ©es de la barre latĂ©rale gĂ©nĂ©rĂ©es automatiquement​

Pour les dĂ©finitions de barres latĂ©rales Ă©crites Ă  la main, vous fournirez des mĂ©tadonnĂ©es aux Ă©lĂ©ments de la barre latĂ©rale par le biais de sidebars.js; pour les dĂ©finitions « autogenerated Â», Docusaurus les lira Ă  partir du fichier respectif de l'Ă©lĂ©ment. En plus, vous voudrez peut-ĂȘtre ajuster la position relative de chaque Ă©lĂ©ment car par dĂ©faut, les Ă©lĂ©ments Ă  l'intĂ©rieure d'une section d'une barre latĂ©rale seront gĂ©nĂ©rĂ©s dans l'ordre alphabĂ©tique (en utilisant les noms des fichiers et des dossiers).

MĂ©tadonnĂ©es de l'Ă©lĂ©ment doc​

Les attributs label, className, et customProps sont dĂ©clarĂ©s respectivement dans le front matter sous sidebar_label, sidebar_class_name et sidebar_custom_props. La position peut ĂȘtre spĂ©cifiĂ©e de la mĂȘme maniĂšre, dans le font matter via sidebar_position.

docs/tutorials/tutorial-easy.md
---
sidebar_position: 2
sidebar_label: Facile
sidebar_class_name: green
---

# Tutoriel facile

C'est le tutoriel facile !

MĂ©tadonnĂ©es de l'Ă©lĂ©ment de category​

Ajouter un fichier _category_.json ou _category_.yml dans le dossier respectif. Vous pouvez spécifier les métadonnées de la catégorie ainsi que les métadonnées de la position. label, className, position, et customProps seront par défaut les valeurs respectives du doc liée à la catégorie, s'il y en a une.

docs/tutorials/_category_.json
{
"position": 2.5,
"label": "Tutoriel",
"collapsible": true,
"collapsed": false,
"className": "red",
"link": {
"type": "generated-index",
"title": "Aperçu du tutoriel"
},
"customProps": {
"description": "Cette description peut ĂȘtre utilisĂ©e dans le DocCard swizzlĂ©"
}
}
info

Si le link est explicitement spécifié, Docusaurus n'appliquera aucune convention par défaut.

Les liens vers les docs peuvent ĂȘtre spĂ©cifiĂ©s de maniĂšre relative, par exemple, si la catĂ©gorie est gĂ©nĂ©rĂ©e avec le rĂ©pertoire guides, "link": {"type": "doc", "id": "intro"} sera rĂ©solu vers l'ID guides/intro, ne retombant sur intro que si un doc avec l'ancien ID n'existe pas.

Vous pouvez également utiliser link: null pour ne pas respecter les conventions par défaut et ne pas générer de page d'index de catégorie.

info

Les mĂ©tadonnĂ©es de position ne sont utilisĂ©es qu'Ă  l'intĂ©rieur d'une section de barre latĂ©rale : Docusaurus ne rĂ©organise pas les autres Ă©lĂ©ments de votre barre latĂ©rale.

Utilisation des prĂ©fixes de nombre​

Une façon simple d'ordonner une barre latĂ©rale gĂ©nĂ©rĂ©e automatiquement est de prĂ©fixer les documents et les dossiers par des prĂ©fixes numĂ©riques, ce qui les fait Ă©galement apparaĂźtre dans le systĂšme de fichiers dans le mĂȘme ordre lorsqu'ils sont triĂ©s par nom de fichier :

docs
├── 01-Intro.md
├── 02-Tutorial Easy
│ ├── 01-First Part.md
│ ├── 02-Second Part.md
│ └── 03-End.md
├── 03-Tutorial Advanced
│ ├── 01-First Part.md
│ ├── 02-Second Part.md
│ ├── 03-Third Part.md
│ └── 04-End.md
└── 04-End.md

Pour faciliter son adoption, Docusaurus prend en charge plusieurs formats de préfixes numériques.

Par défaut, Docusaurus supprimera le préfixe de nombre de l'identifiant du doc, du titre, du libellé et des chemins de l'URL.

attention

Préférez l'utilisation de métadonnées supplémentaires.

Mettre Ă  jour un prĂ©fixe de nombres peut ĂȘtre ennuyeux, car cela peut nĂ©cessiter la mise Ă  jour de plusieurs liens Markdown existants :

docs/02-Tutorial Easy/01-First Part.md
- Check the [Tutorial End](../04-End.mdx);
+ Check the [Tutorial End](../05-End.mdx);

Personnalisation du gĂ©nĂ©rateur d'Ă©lĂ©ments de la barre latĂ©rale​

Vous pouvez fournir une fonction personnalisée sidebarItemsGenerator dans la configuration du plugin docs (ou du preset) :

docusaurus.config.js
export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({
defaultSidebarItemsGenerator,
numberPrefixParser,
item,
version,
docs,
categoriesMetadata,
isCategoryIndex,
}) {
// Exemple : retourne une liste codĂ©e en dur des Ă©lĂ©ments statiques de la barre latĂ©rale
return [
{type: 'doc', id: 'doc1'},
{type: 'doc', id: 'doc2'},
];
},
},
],
],
};
astuce

Réutiliser et améliorer le générateur par défaut au lieu d'écrire un générateur à partir de zéro : le générateur par défaut que nous fournissons fait 250 lignes de long.

Ajoutez, mettez à jour, filtrez, réordonnez les éléments de la barre latérale en fonction de votre cas d'utilisation :

docusaurus.config.js
// Inverse l'ordre des éléments de la barre latérale (y compris les éléments de catégorie imbriqués)
function reverseSidebarItems(items) {
// Inverse les éléments dans la catégorie
const result = items.map((item) => {
if (item.type === 'category') {
return {...item, items: reverseSidebarItems(item.items)};
}
return item;
});
// Inverse les éléments du niveau actuel
result.reverse();
return result;
}

export default {
plugins: [
[
'@docusaurus/plugin-content-docs',
{
async sidebarItemsGenerator({defaultSidebarItemsGenerator, ...args}) {
const sidebarItems = await defaultSidebarItemsGenerator(args);
return reverseSidebarItems(sidebarItems);
},
},
],
],
};