Dynamic Module

NestJS 🟡 Mid

Définition

Module configurable via une méthode statique (forRoot/forRootAsync) qui retourne un DynamicModule. Permet de passer des options de configuration a l'import.

Analogie

Comme un abonnement téléphonique : le même opérateur mais tu choisis ton forfait (options) a la souscription.

Exemple de code

@Module({})
export class MailModule {
  static forRoot(config: MailConfig): DynamicModule {
    return {
      module: MailModule,
      providers: [{ provide: 'MAIL_CONFIG', useValue: config }, MailService],
      exports: [MailService],
    };
  }
}

Cas d'usage

Créer des modules réutilisables comme les modules de config, cache ou mail avec des paramètrès variables.

Anti-pattern

Hardcoder la configuration directement dans le module au lieu de la rendre injectable.
#core#architecture#interview

En entretien

  1. C'est quoi un Dynamic Module et à quoi ça sert concrètement ?

    C'est un module configurable via une méthode statique comme forRoot ou forRootAsync qui retourne un DynamicModule, permettant de passer des options de configuration à l'import - un peu comme un abonnement téléphonique où c'est le même opérateur mais tu choisis ton forfait à la souscription. On s'en sert pour des modules réutilisables comme config, cache ou mail avec des paramètres variables.

  2. Quel est le piège si tu ne rends pas ta config injectable dans ce genre de module ?

    L'anti-pattern classique c'est de hardcoder la configuration directement dans le module au lieu de la rendre injectable via les options passées à forRoot. Ça rend le module impossible à réutiliser ailleurs avec une config différente.

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre