0Pricing
Micro Frontends Architecture with Module Federation · Leçon

Modules singleton et gestion des versions

Comprenez comment garantir qu’une seule instance d’un module est chargée et comment gérer les conflits de versions.

Modules singleton et gestion des versions est une leçon Micro Frontends Architecture with Module Federation gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Micro Frontends Architecture with Module Federation, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Micro Frontends Architecture with Module Federation comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

What are Singleton Modules?

In Micro Frontend architectures, a singleton module is a piece of code or a library that should only ever exist as a single instance across your entire application, even if multiple Micro Frontends try to load it.

Think of it as a unique resource that all parts of your system need to share consistently.

  • Ensures a single source of truth.
  • Prevents conflicting states or behaviors.

Why Singletons Matter for MFEs

Imagine multiple Micro Frontends (MFEs) all loading their own copy of a UI library like React, or a state management library like Redux.

Without singletons, you could end up with:

  • Multiple instances of React Context, breaking component communication.
  • Separate Redux stores, leading to inconsistent application state.
  • Increased bundle size due to duplicate code.

Singletons solve these issues by guaranteeing a unified dependency.

Implementing Singletons with MF

Module Federation makes it easy to declare shared modules as singletons using the singleton: true option in your Webpack configuration.

When this is set, Webpack ensures that only one version of the specified module is loaded and used by all federated applications (hosts and remotes) at runtime.

Code: Configuring a Singleton

Here's how you'd configure a shared module, like react, to be a singleton in your webpack.config.js:

const { ModuleFederationPlugin } = require('webpack').container;

module.exports = {
  // ... other Webpack config
  plugins: [
    new ModuleFederationPlugin({
      name: 'host_app',
      remotes: {},
      shared: {
        react: {
          singleton: true, // Only one React instance allowed
          requiredVersion: '^18.0.0',
        },
        'react-dom': {
          singleton: true, // Only one ReactDOM instance allowed
          requiredVersion: '^18.0.0',
        },
      },
    }),
  ],
};

Understanding Shared Module Versioning

Beyond ensuring a single *instance* (singleton), you also need to manage which *version* of a shared module gets loaded.

What if one MFE needs React v17 and another needs React v18? Module Federation has mechanisms to handle these version conflicts and ensure compatibility or gracefully fail.

`requiredVersion` for Specificity

The requiredVersion option in the shared configuration allows you to specify the semantic version (semver) range that your application expects for a shared module.

Webpack will try to find a compatible version among the host and remote applications. If a compatible version is found, it's used. If not, it might load a fallback or throw an error, depending on other settings.

Code: Specifying Required Versions

Here's how you might define a requiredVersion for a shared library:

const { ModuleFederationPlugin } = require('webpack').container;

module.exports = {
  // ...
  plugins: [
    new ModuleFederationPlugin({
      // ...
      shared: {
        lodash: {
          singleton: false,
          requiredVersion: '^4.17.21', // Any version compatible with 4.17.21
        },
        moment: {
          singleton: true,
          requiredVersion: '2.29.1', // Exactly version 2.29.1
        },
      },
    }),
  ],
};

`strictVersion: true` for Strictness

While requiredVersion guides version selection, strictVersion: true enforces it rigorously.

If strictVersion: true is enabled and a remote module requests a version that is incompatible with the host's requiredVersion (or the version already loaded), Module Federation will throw an error and prevent the application from loading. This prevents unexpected behavior from version mismatches.

Code: Enforcing Strict Versioning

Combining singleton, requiredVersion, and strictVersion for critical dependencies:

const { ModuleFederationPlugin } = require('webpack').container;

module.exports = {
  // ...
  plugins: [
    new ModuleFederationPlugin({
      // ...
      shared: {
        react: {
          singleton: true,
          requiredVersion: '^18.0.0',
          strictVersion: true, // Fail if versions are incompatible
        },
        // ... other shared modules
      },
    }),
  ],
};

Best Practices for Shared Dependencies

To effectively manage singleton modules and versioning:

  • Use Semantic Versioning (SemVer): Adhere to major.minor.patch for all shared modules.
  • Communicate: Ensure teams are aware of shared module updates and version requirements.
  • Test Compatibility: Regularly test your federated applications to ensure shared modules work across all remotes and hosts.
  • Be Strategic: Not all shared modules need to be singletons or have strict versioning. Apply these settings thoughtfully based on the module's criticality.

Quick Check: Singleton & Versioning

When configuring shared modules in Module Federation, what are the primary benefits of using singleton: true and strictVersion: true?

Recap & Next Steps

You've now learned about singleton modules and versioning in Module Federation!

  • Singleton modules ensure only one instance of a shared dependency exists across your federated application, crucial for stateful libraries.
  • The requiredVersion and strictVersion options help manage compatibility and prevent issues arising from conflicting module versions.

These techniques are vital for building robust and predictable Micro Frontend applications.

Questions Fréquemment Posées

La leçon « Modules singleton et gestion des versions » est-elle gratuite ?

Oui — le texte complet de « Modules singleton et gestion des versions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Micro Frontends Architecture with Module Federation, passe à CoddyKit PRO. Le cours Micro Frontends Architecture with Module Federation comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Modules singleton et gestion des versions » ?

Comprenez comment garantir qu’une seule instance d’un module est chargée et comment gérer les conflits de versions. Tu pratiques Micro Frontends Architecture with Module Federation avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Micro Frontends Architecture with Module Federation ?

Aucune expérience préalable n'est requise. Micro Frontends Architecture with Module Federation sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.

Combien de temps prend la leçon « Modules singleton et gestion des versions » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Micro Frontends Architecture with Module Federation ?

Oui. Chaque leçon Micro Frontends Architecture with Module Federation inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Consommer des dépendances partagées
  2. Modules singleton et gestion des versions
  3. Chargement dynamique des modules
  4. Partager l’état et les utilitaires entre les applications distantes
← Retour à Micro Frontends Architecture with Module Federation