Référence de configuration
Configuration de l’intégration starlight
Starlight est une intégration construite sur le framework web Astro. Vous pouvez configurer votre projet dans le fichier de configuration astro.config.mjs
:
// astro.config.mjs
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
export default defineConfig({
integrations: [
starlight({
title: 'Mon délicieux site de docs',
}),
],
});
Vous pouvez passer les options suivantes à l’intégration starlight
.
title
(obligatoire)
Type : string
Définissez le titre de votre site web. Il sera utilisé dans les métadonnées et dans le titre de l’onglet du navigateur.
description
Type : string
Définissez la description de votre site web. Utilisée dans les métadonnées partagées avec les moteurs de recherche dans la balise <meta name="description">
si description
n’est pas définie dans le frontmatter d’une page.
logo
Type : LogoConfig
Définit une image de logo à afficher dans la barre de navigation à côté ou à la place du titre du site. Vous pouvez soit définir une seule propriété src
, soit définir des sources d’images séparées pour light
et dark
.
starlight({
logo: {
src: './src/assets/my-logo.svg',
},
});
LogoConfig
type LogoConfig = { alt?: string; replacesTitle?: boolean } & (
| { src: string }
| { light: string; dark: string }
);
tableOfContents
Type : false | { minHeadingLevel?: number; maxHeadingLevel?: number; }
Par défaut : { minHeadingLevel: 2; maxHeadingLevel: 3; }
Configurez la table des matières affichée à droite de chaque page. Par défaut, les titres <h2>
et <h3>
seront inclus dans cette table des matières.
editLink
Type : { baseUrl: string }
Permet d’activer les liens “Modifier cette page” en définissant l’URL de base qu’ils doivent utiliser. Le lien final sera editLink.baseUrl
+ le chemin de la page actuelle. Par exemple, pour permettre l’édition de pages dans le repo withastro/starlight
sur GitHub :
starlight({
editLink: {
baseUrl: 'https://github.com/withastro/starlight/edit/main/',
},
});
Avec cette configuration, une page /introduction
aurait un lien d’édition pointant vers https://github.com/withastro/starlight/edit/main/src/docs/introduction.md
.
sidebar
Type : SidebarItem[]
Configure les éléments de navigation de la barre latérale de votre site.
Une barre latérale est un tableau de liens et de groupes de liens.
Chaque élément doit comporter un label
et l’une des propriétés suivantes :
-
link
— un lien uninque vers une URL spécifique, comme'/home'
ou'https://example.com'
. -
items
— un tableau contenant plus de liens et des sous-groupes. -
autogenerate
— un objet indiquant un répertoire de vos docs dpeuis lequel générer automatiquement un groupe de liens.
starlight({
sidebar: [
// Un lien unique étiqueté “Accueil”.
{ label: 'Accueil', link: '/' },
// Un groupe étiqueté “Débuter ici” contenant deux liens.
{
label: 'Débuter ici',
items: [
{ label: 'Introduction', link: '/intro' },
{ label: 'Prochaines étapes', link: '/next-steps' },
],
},
// Un groupe liant toutes les pages présentes dans le répertoire reference.
{
label: 'Référence',
autogenerate: { directory: 'reference' },
},
],
});
Tri
Les groupes de barres latérales générées automatiquement sont triés par nom de fichier et par ordre alphabétique.
Par exemple, une page générée à partir de astro.md
apparaîtrait au-dessus de la page de starlight.md
.
Groupes rétractables
Les groupes de liens sont développés par défaut. Vous pouvez modifier ce comportement en définissant la propriété collapsed
d’un groupe sur true
.
Les sous-groupes générés automatiquement respectent la propriété collapsed
de leur groupe parent par défaut. Définissez la propriété autogenerate.collapsed
pour remplacer ce comportement.
sidebar: [
// Un groupe rétractable de liens.
{
label: 'Collapsed Links',
collapsed: true,
items: [
{ label: 'Introduction', link: '/intro' },
{ label: 'Next Steps', link: '/next-steps' },
],
},
// Un groupe développé contenant des sous-groupes générés automatiquement rétractés.
{
label: 'Reference',
autogenerate: {
directory: 'reference',
collapsed: true,
},
},
],
Traduire les étiquettes
Si votre site est multilingue, le label
de chaque élément est considéré comme étant dans la locale par défaut. Vous pouvez définir une propriété translations
pour fournir des étiquettes pour les autres langues supportées :
sidebar: [
// Un exemple de barre latérale avec des étiquettes traduites en portugais brésilien.
{
label: 'Commencer ici',
translations: { 'pt-BR': 'Comece Aqui' },
items: [
{
label: 'Bien démarrer',
translations: { 'pt-BR': 'Introdução' },
link: '/getting-started',
},
{
label: 'Structure du projet',
translations: { 'pt-BR': 'Estrutura de Projetos' },
link: '/structure',
},
],
},
];
SidebarItem
type SidebarItem = {
label: string;
translations?: Record<string, string>;
badge?: string | BadgeConfig;
} & (
| {
link: string;
attrs?: Record<string, string | number | boolean | undefined>;
}
| { items: SidebarItem[]; collapsed?: boolean }
| {
autogenerate: { directory: string; collapsed?: boolean };
collapsed?: boolean;
}
);
BadgeConfig
interface BadgeConfig {
text: string;
variant: 'note' | 'tip' | 'caution' | 'danger' | 'success' | 'default';
}
locales
Type : { [dir: string]: LocaleConfig }
Configurez l’internationalisation (i18n) de votre site en définissant les locales
supportées.
Chaque entrée doit utiliser comme clé le répertoire dans lequel les fichiers de cette langue sont sauvegardés.
// astro.config.mjs
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
export default defineConfig({
integrations: [
starlight({
title: 'My Site',
// Définit l'anglais comme langue par défaut pour ce site.
defaultLocale: 'en',
locales: {
// Documentations en anglais danse trouve dans `src/content/docs/en/`
en: {
label: 'English',
},
// Documentations en Chinois simplifié se trouve dans `src/content/docs/zh-cn/`
'zh-cn': {
label: '简体中文',
lang: 'zh-CN',
},
// Documentations en Arabe se trouve dans `src/content/docs/ar/`
ar: {
label: 'العربية',
dir: 'rtl',
},
},
}),
],
});
LocaleConfig
interface LocaleConfig {
label: string;
lang?: string;
dir?: 'ltr' | 'rtl';
}
Vous pouvez définir les options suivantes pour chaque locale :
label
(obligatoire)
Type : string
L’étiquette de cette langue à afficher aux utilisateurs, par exemple dans le sélecteur de langue. Le plus souvent, il s’agit du nom de la langue tel qu’un utilisateur de cette langue s’attendrait à le lire, par exemple "English"
, "العربية"
, ou "简体中文"
.
lang
Type : string
L’étiquette d’identification BCP-47 pour cette langue, par exemple "en"
, "ar"
, ou "zh-CN"
. Si elle n’est pas définie, le nom du répertoire de la langue sera utilisé par défaut. Les étiquettes de langue avec des sous-étiquettes régionales (par exemple "pt-BR"
ou "en-US"
) utiliseront les traductions de l’interface utilisateur intégrées pour leur langue de base si aucune traduction spécifique à la région n’est trouvée.
dir
Type : 'ltr' | 'rtl'
Le sens d’écriture de cette langue ; "ltr"
pour gauche à droite (par défaut) ou "rtl"
pour droite à gauche.
Locale racine
Vous pouvez servir la langue par défaut sans répertoire /lang/
en définissant une locale root
:
starlight({
locales: {
root: {
label: 'English',
lang: 'en',
},
fr: {
label: 'Français',
},
},
});
Par exemple, cela vous permet de servir /getting-started/
comme une route anglaise et d’utiliser /fr/getting-started/
comme la page française équivalente.
defaultLocale
Type : string
Définit la langue par défaut pour ce site.
La valeur doit correspondre à l’une des clés de votre objet locales
.
(Si votre langue par défaut est votre root locale, vous pouvez sauter cette étape).
La locale par défaut sera utilisée pour fournir un contenu de remplacement lorsque les traductions sont manquantes.
social
Type : Partial<Record<'bitbucket' | 'codeberg' | 'codePen' | 'discord' | 'email' | 'facebook' | 'github' | 'gitlab' | 'gitter' | 'instagram' | 'linkedin' | 'mastodon' | 'microsoftTeams' | 'patreon' | 'reddit' | 'rss' | 'slack' | 'stackOverflow' | 'telegram' | 'threads' | 'twitch' | 'twitter' | 'x.com' | 'youtube', string>>
Détails optionnels sur les comptes de médias sociaux pour ce site. L’ajout de l’un d’entre eux les affichera sous forme de liens iconiques dans l’en-tête du site.
starlight({
social: {
codeberg: 'https://codeberg.org/knut/examples',
discord: 'https://astro.build/chat',
github: 'https://github.com/withastro/starlight',
gitlab: 'https://gitlab.com/delucis',
linkedin: 'https://www.linkedin.com/company/astroinc',
mastodon: 'https://m.webtoo.ls/@astro',
threads: 'https://www.threads.net/@nmoodev',
twitch: 'https://www.twitch.tv/bholmesdev',
twitter: 'https://twitter.com/astrodotbuild',
'x.com': 'https://x.com/astrodotbuild',
youtube: 'https://youtube.com/@astrodotbuild',
},
});
customCss
Type : string[]
Fournit des fichiers CSS pour personnaliser l’aspect et la convivialité de votre site Starlight.
Prend en charge les fichiers CSS locaux relatifs à la racine de votre projet, par exemple './src/custom.css'
, et les CSS que vous avez installés en tant que module npm, par exemple '@fontsource/roboto'
.
starlight({
customCss: ['./src/custom-styles.css', '@fontsource/roboto'],
});
head
Type : HeadConfig[]
Ajoute des balises personnalisées au <head>
de votre site Starlight.
Cela peut être utile pour ajouter des analyses et d’autres scripts et ressources tiers.
starlight({
head: [
// Exemple : ajouter un script d'analyse Fathom tag.
{
tag: 'script',
attrs: {
src: 'https://cdn.usefathom.com/script.js',
'data-site': 'MY-FATHOM-ID',
defer: true,
},
},
],
});
HeadConfig
interface HeadConfig {
tag: string;
attrs?: Record<string, string | boolean | undefined>;
content?: string;
}
lastUpdated
Type : boolean
Par défaut : false
Contrôlez si le pied de page affiche la date de la dernière mise à jour de la page.
Par défaut, cette fonctionnalité s’appuie sur l’historique Git de votre dépôt et peut ne pas être précise sur certaines plateformes de déploiement effectuant des
clonages superficiels. Une page peut remplacer ce paramètre ou
la date basée sur Git en utilisant le champ lastUpdated
du frontmatter.
pagination
Type : boolean
Par défaut : true
Définnissez si le pied de page doit inclure des liens vers les pages précédentes et suivantes.
Une page peut remplacer ce paramètre ou le texte du lien et/ou l’URL en utilisant les champs de frontmatter prev
et next
.
favicon
Type : string
Par défaut : '/favicon.svg'
Définnissez le chemin de l’icône par défaut pour votre site Web qui doit être situé dans le répertoire public/
et être un fichier d’icône valide (.ico
, .gif
, .jpg
, .png
ou .svg
).
starlight({
favicon: '/images/favicon.svg',
}),
Si vous avez besoin de définir des variantes supplémentaires ou des icônes de secours, vous pouvez ajouter des balises en utilisant l’option head
:
starlight({
favicon: '/images/favicon.svg'.
head: [
// Ajouter une icône ICO de secours pour Safari.
{
tag: 'link',
attrs: {
rel: 'icon',
href:'/images/favicon.ico',
sizes: '32x32',
},
},
],
});
titleDelimiter
Type : string
Par défaut : '|'
Définit le délimiteur entre le titre de la page et le titre du site dans la balise <title>
de la page, qui s’affiche dans les onglets du navigateur.
Par défaut, chaque page a une balise <title>
contenant Titre de la page | Titre du site
.
Par example, cette page a pour titre « Référence de configuration » et ce site a pour titre « Starlight », donc la balise <title>
de cette page contient « Référence de configuration | Starlight ».
components
Type : Record<string, string>
Fournit les chemins vers les composants pour redéfinir les implémentations par défaut de Starlight.
starlight({
components: {
SocialLinks: './src/components/MySocialLinks.astro',
},
});
Consultez la référence des redéfinitions pour plus de détails sur tous les composants que vous pouvez redéfinir.