Aller au contenu principal
Version : 3.4.0

Architecture

Aperçu de l'architecture

Ce diagramme montre comment Docusaurus fonctionne pour construire votre application. Les plugins collectent chacun leur contenu et émettent des données JSON; les thÚmes fournissent des composants de mise en page qui reçoivent les données JSON en tant que modules de route. Le bundler regroupe tous les composants et émet un paquet serveur et un paquet client.

Bien que vous (auteurs de plugins ou créateurs de sites) écriviez du JavaScript en permanence, n'oubliez pas que le JS est en fait exécuté dans différents environnements :

  • Toutes les mĂ©thodes de cycle de vie des plugins sont exĂ©cutĂ©es dans Node. Par consĂ©quent, jusqu'Ă  ce que nous prenions en charge les modules ES dans notre base de code, le code source des plugins doit ĂȘtre fourni sous forme de modules ES pouvant ĂȘtre importĂ©s, ou de CommonJS pouvant ĂȘtre require.
  • Le code du thĂšme est construit avec Webpack. Ils peuvent ĂȘtre fournis en tant que ESM – suivant les conventions de React.

Le code du plugin et celui du thĂšme ne s'importent jamais directement les uns aux autres : ils ne communiquent qu'Ă  travers des protocoles (dans notre cas, Ă  travers des fichiers temporaires JSON et des appels Ă  addRoute). Un bon modĂšle mental est d'imaginer que les plugins ne sont pas Ă©crits en JavaScript, mais dans un autre langage comme Rust. Le seul moyen d'interagir avec les plugins pour l'utilisateur est de passer par docusaurus.config.js, qui est lui-mĂȘme exĂ©cutĂ© dans Node (d'oĂč la possibilitĂ© d'utiliser require et de passer des callbacks comme options de plugins).

Pendant le regroupement, le fichier de configuration est lui-mĂȘme sĂ©rialisĂ© et regroupĂ©, permettant au thĂšme d'accĂ©der aux options de configuration telles quethemeConfig ou baseUrl via la fonction [useDocusaurusContext()](../docusaurus-core.mdx#useDocusaurusContext). Cependant, l'objet siteConfigne contient que **serializable values** (valeurs qui sont prĂ©servĂ©es aprĂšsJSON.stringify()). Les fonctions, les regex, etc. seraient perdus du cĂŽtĂ© client. Le themeConfig` est conçu pour ĂȘtre entiĂšrement sĂ©rialisable.