Publier une documentation avec Astro Starlight
Modifié le 24 février 2024
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.
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.
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 !
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 :
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).
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 :
.
âââ 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/ !
yarn dev
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
:
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Ă©).
Comme vous avez pu le voir tout juste en dessous, il y a des components,
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 âš
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.
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 :
Et voici comment est organisé mon dossier :
.
âââ 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.
---
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) :
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 :
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. Ce qui donne Ă votre dossier /src/content/docs
:
.
âââ 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.
Doc de Mr. RobĂžt
Documentation officielle de Mr. RobÞt, un robot Discord français.
Publié le 26 décembre 2023