Référence

Points d'extension

Les modules ne s'importent jamais entre eux. Pour collaborer, ils passent par les registries du core.

Pourquoi #

Coder en dur une référence d'un module à un autre (par ex. office → code) casserait l'indépendance : on ne peut pas supposer qu'un module est installé.

Les deux options #

  • Vendorer le fichier nécessaire dans votre module.
  • Passer par un point d'extension : ExtensionRegistry / ModuleServiceRegistry côté frontend.

Exemple : contrat inter-module #

// Le module calendar publie un service…
ModuleServiceRegistry.publish('calendar', {
  openDate: (arg) => { /* ouvre l'agenda sur une date */ }
})

// …qu'un autre module (ex. jarvis) consomme s'il est présent
ModuleServiceRegistry.get('calendar')?.openDate('2026-06-25')
Note

Découverte dynamique uniquement (DB ou registry) et appel optionnel (?.). Ne supposez jamais la présence d'un module.

Singletons partagés #

React, Radix DropdownMenu, les stores… doivent rester external et ne jamais être re-bundlés, sous peine de doublons qui cassent l'UI.