Une banniÚre avec le logo Astro et Starlight, et le titre de l'article "Créer une documentation avec Starlight"

Publier une documentation avec Astro Starlight

J’ai mis longtemps à vouloir mettre la main dans la pñte. Je m’explique, je contribue activement à la documentation d’Astro depuis plus d’un an.

@thomasbnt Astro contributions

Nous sommes entre 5-10 personnes si ce n’est pas plus Ă  vous proposer du texte entiĂšrement en français. Nous le faisons bĂ©nĂ©volement sur notre temps libre, ça m’aide d’une part Ă  apprendre un peu plus chaque jour l’anglais, et puis je me renseigne en quelque sorte sur Astro. Sans compter que ça favorise la communautĂ© et l’entraide si besoin autour de ce framework. Bref, dans l’Open Source, nous ne sommes jamais seuls. Mais il faut savoir, qu’en un an de contributions, je n’ai JAMAIS touchĂ© Ă  Astro. MĂȘme pas pour un simple projet ou le tester et voir comment il marche.

Aujourd’hui encore, je ne le connais pas assez comme je le devrais. Je me sens en quelque sorte comme un imposteur. Mais pour y remĂ©dier, j’ai crĂ©Ă© la documentation de Mr. RobĂžt avec Astro Starlight !

PrĂ©sentation d’Astro Starlight

On va faire Ă©tape par Ă©tape, avant de s’attaquer Ă  Starlight, on va parler d’Astro.
Astro est un framework pour crĂ©er un site web axĂ© sur un contenu. Que ça soit pour un blog personnel, de l'e-commerce et du marketing, ce ne sont que des exemples parmi d’autres.

Il est basĂ© sur une architecture frontend, avec son frontmatter, et sa capacitĂ© Ă  ne pas avoir de JavaScript. Oui oui, vous avez bien lu. ZĂ©ro JavaScript cĂŽtĂ© client. C’est de ça que vient la rapiditĂ© d’Astro, et qui vous donne un score de 100 points Ă  toutes les catĂ©gories de Ligthouse !

Le résultat du test Lighthouse sur la page docs.mrrobot.app. On remarque que les quatre scores (performance, accessibilité, meilleures pratiques, SEO) sont à 100/100.

Le résultat du test Lighthouse sur la page docs.mrrobot.app. On remarque que les quatre scores (performance, accessibilité, meilleures pratiques, SEO) sont à 100/100.

Vous avez de tas d’autres superbes fonctionnalitĂ©s, c’est personnalisable, server-first, intĂ©gration des Islands. Bref, vous retrouverez plus d’informations sur la documentation que mon simple paragraphe. 😆

Et du coup, Starlight dans tout ça ?
Oui oui, on y vient ! Moi, je le vois tout simplement comme un membre qu’on greffe Ă  Astro. Dans le bon terme, c’est bien un module ! Un module qui ajoute d’autres fonctionnalitĂ©s spĂ©cialement pour faire une documentation, tout simplement ! Il est simple Ă  configurer, prĂȘt Ă  l’emploi dĂšs qu’on crĂ©er un nouveau projet, bref, c’est tout ce qu’on veut quand on doit avoir une documentation publiĂ© dans les temps. Je ne compte pas le fait que le site gĂ©nĂ©rĂ© est responsive, ça devrait ĂȘtre la base. Le thĂšme est personnalisable, et on peut bien Ă©videmment modifier le CSS Ă  notre guise. AprĂšs tout, c’est basĂ© sur Astro !

BanniĂšre Starlight

Starlight 🌟

Créer des sites de documentation avec Astro Starlight

Initier le code

Pour crĂ©er un projet sous Starlight, rien de plus simple, il vous faut simplement Node.js version 18.14.1 ou au-dessus, et avoir accĂšs Ă  votre terminal. Sur votre client, vous pouvez l’initier en tapant :

bash
yarn create astro --template starlight

Si vous le souhaitez, aprĂšs l’installation, vous pouvez ajouter un framework comme React, Vue, Svelte, Tailwind et d’autres avec npx astro add. (Voir la documentation pour ajouter une intĂ©gration).

bash
thomasbnt@thomasbnt:~/lab$ yarn create astro --template starlight
yarn create v1.22.19
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Installed "create-astro@4.6.0" with binaries:
      - create-astro

 astro   Launch sequence initiated.

   dir   Where should we create your new project?
         ./interstellar-inclination
      ◌  tmpl Using starlight as project template
 ██████  Template copying...

  deps   Install dependencies?
         Yes
 ██████  Installing dependencies with yarn...

    ts   Do you plan to write TypeScript?
         No
      ◌  No worries! TypeScript is supported in Astro by default,
         but you are free to continue writing JavaScript instead.

   git   Initialize a new git repository?
         No
      ◌  Sounds good! You can always run git init manually.

  next   Liftoff confirmed. Explore your project!

         Enter your project directory using cd ./interstellar-inclination
         Run yarn dev to start the dev server. CTRL+C to stop.
         Add frameworks like react or tailwind using astro add.

         Stuck? Join us at https://astro.build/chat

â•­â”€â”€â„ïžâ”€â•ź  Houston:
│ ◠ ◡ ◠  Good luck out there, astronaut! 🚀
╰─────╯
Done in 52.80s.

Le process est si simple, au fil des annĂ©es on se simplifie certaines tĂąches, et celle-lĂ , le fait de ne pas devoir Ă  chercher un package telle version et pas l’autre, je trouve ça juste top, un gain de temps. Merci Astro. 💜🚀

Cela vous donne quelque chose comme ça :

bash
.
├── README.md
├── astro.config.mjs
├── node_modules
├── package-lock.json
├── package.json
├── public
│   └── favicon.svg
├── src
│   ├── assets
│   │   └── houston.webp
│   ├── content
│   │   ├── config.ts
│   │   └── docs
│   │       ├── guides
│   │       │   └── example.md
│   │       ├── index.mdx
│   │       └── reference
│   │           └── example.md
│   └── env.d.ts
└── tsconfig.json

Vous n’avez plus qu’à
. lancer le site web, et à aller sur http://localhost:4321/ !

bash
yarn dev

Page d'accueil de la documentation généré par Astro Starlight

Le contenu de votre documentation est Ă©crit par dĂ©faut en anglais, mais tout est modifiable. Je vous rappelle que c’est du code, et que le prochain chapitre, c'est
 d’éditer une page !

Modifier une page

Ouvrez votre bel IDE, vous pouvez remarquer qu’un fichier README est lĂ  pour vous guider. N’hĂ©sitez pas Ă  le lire et Ă  comprendre un peu comment ça marche, ainsi que d’avoir la documentation toujours Ă  votre portĂ©e.

Nous allons directement modifier cette page que vous avez vu juste au-dessus, c’est l’index. Celle que nous verrons en arrivant sur la documentation, celle qui devrait faire la premiĂšre impression et qui nous guide avec quelques informations complĂ©mentaires comme les rĂ©seaux sociaux.

Pour ce faire, nous allons dans src/content/docs/index.mdx :

WebStorm IDE avec le fichier index.mdx d’ouvert.

Nous retrouvons le frontmatter, c’est la partie tout en haut entre les tirets ---, elle dĂ©clare le titre de la page, la description, le template utilisĂ© et d’autres fonctionnalitĂ©s que nous pouvons lui ajouter. Dans cet exemple, nous allons rester simple, car pour rappel, je ne suis pas un expert dans le domaine, et vous guider dans un endroit que mĂȘme moi, je ne connais pas plus que ça, c’est comme marcher sur des orties, ça fait mal. 😆

Mais vous allez voir comment ajouter des petites choses bien sympathiques comme des badges qui font office de statut, ou encore la possibilité de mettre en avant ou pas la page.

Bref, modifions par exemple le titre, et retirons l’image Houston qui se trouve Ă  droite (dĂ©solĂ©).

La page d’accueil modifiĂ©.

Comme vous avez pu le voir tout juste en dessous, il y a des components,

javascript
import { Card, CardGrid } from '@astrojs/starlight/components';

## Next steps

<CardGrid stagger>
    <Card title="Update content" icon="pencil">
        Edit `src/content/docs/index.mdx` to see this page change.
    </Card>
    <Card title="Add new content" icon="add-document">
        Add Markdown or MDX files to `src/content/docs` to create new pages.
    </Card>
    <Card title="Configure your site" icon="setting">
        Edit your `sidebar` and other config in `astro.config.mjs`.
    </Card>
    <Card title="Read the docs" icon="open-book">
        Learn more in [the Starlight Docs](https://starlight.astro.build/).
    </Card>
</CardGrid>

Par défaut Starlight en intÚgre, mais vous pouvez en ajouter. Voir la documentation sur les Components

Passons Ă  une page de la documentation (cliquez sur le bouton bleu si vous n’avez pas Ă©ditĂ© le code). On y voit du simple texte, c’est ici oĂč vous pouvez documenter ce que vous souhaitez, un projet, une sorte de wiki
 ce que vous souhaitez ✹

Un exemple de page de documentation sous Starlight

Tous les fichiers se trouvent dans /src/content/docs , et donc chaque dossier que vous faites, vous permettent de les trier. Par exemple ici dans ce cas, deux dossiers se prĂ©sentent, guides/ et reference/ . Ce qui donne pour cette page /src/content/docs/guides/example.md ! D’ailleurs le fichier est en .md mais vous pouvez le modifier en .mdx . Je pense que vous aurez moins d’erreurs avec votre IDE.

Hop, on modifie tout ça pour faire quelque chose de plus complet !

astro.config.mjs

Ce fichier est important, c’est lui qui crĂ©e le menu Ă  gauche (sidebar), les liens des rĂ©seaux sociaux en haut Ă  droite, le titre que vous aurez en haut Ă  gauche de la documentation, et pleines d’autres options.

Ici, je vais modifier la partie sidebar afin de rĂ©fĂ©rer les pages que j’ai modifiĂ©s/ajoutĂ©s pour cet exemple.

astro.config.mjsjs
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';

// https://astro.build/config
export default defineConfig({
    integrations: [
        starlight({
            title: 'Mr. Robot',
            sidebar: [
                {
                    label: 'Introduction',
                    link: '/introduction/',
                },
                {
                    label: 'Characters',
                    autogenerate: { directory: 'characters' },
                },
            ],
        }),
    ],
});

La page Introduction est seule, du coup, j'ai supprimĂ© les items, et directement attribuĂ© un lien. Quand aux personnages, au lieu d’ajouter page par page, j’ai simplement utilisĂ© autogenerate . Elle vous permet de
 gĂ©nĂ©rer
 automatiquement depuis votre dossier ciblĂ© (ici characters ). Voici donc ce que ça donne :

Modification de la page Mr. Robot.

Et voici comment est organisé mon dossier :

bash
.
├── characters
│   ├── angelamoss.mdx
│   ├── elliotalderson.mdx
│   └── mrrobot.mdx
├── index.mdx
└── introduction.mdx

autogenerate

Par dĂ©faut avec autogenerate, les fichiers sont affichĂ©s par ordre alphabĂ©tique, mais je lui indique que la page “Mr. Robot” doit ĂȘtre tout au-dessus, avec l’attribue order directement dans le frontmatter. Faites trĂšs attention Ă  la tabulation de votre frontmatter, j’ai eu pas mal d’erreurs.

Markdown
---
title: "Mr. Robot"
sidebar:
  order: 1
---

Les badges

Je vous en ai parlĂ© un peu au-dessus, et vous le voyez sur le screenshot, un badge colorĂ© est apparu juste Ă  droite d’un texte, et ça donne ça en code (toujours dans le frontmatter) :

Markdown
sidebar:  
   order: 1  
   badge:    
      text: 'New'    
      variant: tip

Vous voyez, votre documentation prend forme trĂšs rapidement ! On a droite les Ă©tapes/titres dans la page, et Ă  gauche votre menu qui englobe le tout. 🚀

Maintenant, nous allons voir une partie bonus de Starlight. Celle que j’aime particuliùrement, celle qui rassemble les gens, l’internationalisation !

L’internationalisation (i18n)

Une documentation remplie, c’est top.
Un code source Ă©ditable par n’importe qui, c’est gĂ©nial.
Partager cette documentation Ă  l’autre bout du monde, c’est super coo
. Non du coup
 et si la personne ne comprend pas ce qu'il est Ă©crit ?

Et c’est lĂ  que l’internationalisation arrive ! đŸŠžâ€â™€ïžđŸŠžâ€â™‚ïž

Dans Astro Starlight, nous pouvons en quelques lignes, ajouter la possibilitĂ© de mettre la documentation en plusieurs langues. Rien n’est magique, tout est fantastique ! Non plus sĂ©rieusement, vous allez comprendre comment c’est gĂ©rĂ© avec ces bouts de codes :

astro.config.mjsjavascript
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';

// https://astro.build/config
export default defineConfig({
    integrations: [
        starlight({
            title: 'Mr. Robot',
            sidebar: [
                {
                    label: 'Introduction',
                    link: '/introduction/',
                },
                {
                    label: 'Characters',
                    autogenerate: { directory: 'characters' },
                    translations: {
                        fr: 'Personnages',
                    },
                },
            ],
            defaultLocale: 'root',
            locales: {
                root: {
                    label: 'English',
                    lang: 'en',
                },
                fr: {
                    label: 'Français',
                    lang: 'fr',
                },
            },
        }),
    ],
});

Ici, on défini la langue par défaut, donc en pour English. Et on a ajouté la langue fr soit Française comme un autre choix. Nous pouvons donc choisir notre langue sur le site web en haut à droite :

La liste dĂ©roulante des diffĂ©rentes langues disponibles pour la documentation. Ici on a l’anglais et le français.

La liste dĂ©roulante des diffĂ©rentes langues disponibles pour la documentation. Ici, on a l’anglais et le français. Ce qui donne Ă  votre dossier /src/content/docs :

bash
.
├── characters
│   ├── angelamoss.mdx
│   ├── elliotalderson.mdx
│   └── mrrobot.mdx
├── fr
│   └── characters
│       └── elliotalderson.mdx
├── index.mdx
└── introduction.mdx

Chaque langue a son propre dossier, et dans chaque dossier le nom des dossiers doivent correspondre Ă  celui de la langue root.

Exemple : introduction.mdx (EN) → /fr/introduction.mdx (FR)

Vous avez le guide officiel de comment bien intĂ©grer l’i18n Ă  votre projet.


Merci Ă  toi d’avoir lu jusqu'au bout, n’hĂ©site pas Ă  partager votre documentation dans le monde entier et mĂȘme ici, ça pourrait ĂȘtre une petite mine d’or pour certains, et une dĂ©couverte pour d’autres ! Voici un exemple parfait de documentation, c’est celle de Mr. RobĂžt, listant les commandes et les fonctionnalitĂ©s du robot Discord.

BanniĂšre Documentation Mr. RobĂžt

Doc de Mr. RobĂžt

Documentation officielle de Mr. RobÞt, un robot Discord français.


Soutenez-moi
Si vous aimez mon contenu, vous pouvez me soutenir en faisant un don récurant ou spontanément sur Buy Me a Coffee.