Aller au contenu

Configuration Astro

Les dépôts de contenu ne maintiennent pas leur propre fichier astro.config.mjs. À la place, ils importent une fabrique de configuration depuis le paquet npm @f5-sales-demo/docs-theme qui retourne une configuration Astro complète avec Starlight, huit plugins intégrés et tous les paramètres par défaut du thème.

Le fichier astro.config.mjs d’un dépôt de contenu (fourni par le constructeur Docker) est une simple enveloppe :

import { createF5xcDocsConfig } from '@f5-sales-demo/docs-theme/config';
export default createF5xcDocsConfig();

Toute personnalisation s’effectue via l’objet d’options ou les variables d’environnement — il n’est pas nécessaire de modifier le câblage des plugins, les imports CSS ou les substitutions de composants.

createF5xcDocsConfig accepte un objet F5xcDocsConfigOptions. Chaque champ est optionnel ; les variables d’environnement et les valeurs par défaut sensées comblent les lacunes.

interface F5xcDocsConfigOptions {
site?: string;
base?: string;
title?: string;
description?: string;
githubRepository?: string;
llmsOptionalLinks?: Array<{ title: string; url: string }>;
additionalIntegrations?: AstroIntegration[];
additionalRemarkPlugins?: Array<unknown>;
megaMenuItems?: MegaMenuItem[];
head?: HeadEntry[];
logo?: { src: string } | { light: string; dark: string };
}
OptionValeur par défaut / Variable d’environnementObjectif
siteDOCS_SITE ou https://f5-sales-demo.github.ioURL de base canonique
baseDOCS_BASE ou /Chemin de base de l’URL pour les sites de projet
titleDOCS_TITLE ou DocumentationTitre du site dans l’en-tête et l’onglet du navigateur
descriptionDOCS_DESCRIPTION ou chaîne videDescription du site pour les métadonnées et llms.txt
githubRepositoryGITHUB_REPOSITORY ou chaîne videActive les liens d’édition et l’icône sociale GitHub
llmsOptionalLinksLLMS_OPTIONAL_LINKS (JSON) ou []Liens supplémentaires pour le plugin llms.txt
additionalIntegrations[]Intégrations Astro supplémentaires à ajouter
additionalRemarkPlugins[]Plugins remark supplémentaires ajoutés après remark-mermaid
megaMenuItemsMenu Produits/Solutions/Docs/Assistance intégréEntrées de menu méga au niveau supérieur
headBalise <script> du CDN MermaidEntrées <head> personnalisées
logo@f5-sales-demo/docs-theme/assets/github-avatar.pngLogo de la barre latérale (source unique ou paire clair/sombre)

La fabrique câble automatiquement huit plugins Starlight :

PluginObjectif
starlight-mega-menuMenu méga de navigation supérieure avec dispositions grille/liste
starlight-videosIntégration de vidéos dans les pages de documentation
starlight-image-zoomZoom au clic sur les images
@f5-sales-demo/docs-theme (lui-même)Injection CSS, substitutions de composants, middleware de routes
starlight-scroll-to-topBouton de retour en haut avec anneau de progression
starlight-heading-badgesAnnotations de badges sur les titres
starlight-page-actionsBoutons d’actions de page
starlight-plugin-iconsPrise en charge des icônes dans Starlight
starlight-llms-txtGénère llms.txt et llms-full.txt pour la consommation par les LLM

Ceux-ci sont enregistrés dans l’ordre dans config.ts. Le plugin du thème (@f5-sales-demo/docs-theme) est lui-même un plugin Starlight qui s’exécute dans cette liste.

Le plugin du thème est défini dans index.ts et enregistré parmi les plugins intégrés ci-dessus. Son hook config:setup effectue trois actions :

  1. Injection de CSS — préfixe fonts/font-face.css et styles/custom.css dans le tableau customCss de Starlight
  2. Substitution de composants — remplace cinq composants Starlight :
    • Banner — navigation par fil d’Ariane avec lien d’édition
    • EditLink — intentionnellement vide (le lien d’édition se trouve dans Banner)
    • Footer — liens vers les réseaux sociaux ajoutés sous le pied de page par défaut
    • SiteTitle — logo avec lien vers la page d’accueil
    • MarkdownContent — enveloppe permettant les vidéos et le zoom sur les images
  3. Ajout d’un middleware de routes — enregistre route-middleware.ts qui filtre les pages d’index de la barre latérale et supprime la table des matières sur les pages d’index
// index.ts — Starlight plugin entry point
export default function f5xcDocsTheme(): StarlightPlugin {
return {
name: '@f5-sales-demo/docs-theme',
hooks: {
'config:setup'({ config, updateConfig, addRouteMiddleware }) {
addRouteMiddleware({
entrypoint: '@f5-sales-demo/docs-theme/route-middleware',
order: 'pre',
});
updateConfig({
customCss: [
...(config.customCss ?? []),
'@f5-sales-demo/docs-theme/fonts/font-face.css',
'@f5-sales-demo/docs-theme/styles/custom.css',
],
components: {
...config.components,
Banner: '@f5-sales-demo/docs-theme/components/Banner.astro',
EditLink: '@f5-sales-demo/docs-theme/components/EditLink.astro',
Footer: '@f5-sales-demo/docs-theme/components/Footer.astro',
SiteTitle: '@f5-sales-demo/docs-theme/components/SiteTitle.astro',
MarkdownContent: '@f5-sales-demo/docs-theme/components/MarkdownContent.astro',
},
});
},
},
};
}

Tous les chemins utilisent des spécificateurs de paquets npm (p. ex., @f5-sales-demo/docs-theme/styles/custom.css) qui se résolvent via la table exports dans package.json.

Au-delà de Starlight et de ses plugins, la fabrique enregistre également :

  • @astrojs/react — active la prise en charge des composants React dans les pages MDX
  • remark-mermaid — plugin remark personnalisé qui convertit les blocs de code ```mermaid en diagrammes rendus

Des intégrations supplémentaires et des plugins remark peuvent être ajoutés via les options additionalIntegrations et additionalRemarkPlugins.

Aucune barre latérale personnalisée n’est définie. Starlight génère automatiquement la barre latérale à partir de la structure de fichiers dans docs/, en utilisant le frontmatter title de chaque page comme texte de lien et sidebar.order pour le tri. Le middleware de routes filtre automatiquement les pages d’index de la barre latérale.