PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Что такое Module Federation и как с его помощью строят микрофронтенды?

Продвинутые темы

Module Federation — функция Webpack 5 (есть плагины для Vite и Rspack), которая позволяет одному приложению во время работы загружать код другого приложения, развёрнутого отдельно. На ней строят микрофронтенды.

Роли

  • Host (контейнер) — приложение, которое подключает чужие модули.
  • Remote — приложение, которое публикует (экспортирует) свои модули.

Любое приложение может быть и тем и другим.

Настройка

Remote объявляет, что экспортирует:

new ModuleFederationPlugin({
  name: 'catalog',
  filename: 'remoteEntry.js',
  exposes: { './ProductList': './src/ProductList' },
  shared: { react: { singleton: true }, 'react-dom': { singleton: true } },
});

Host указывает, откуда брать:

new ModuleFederationPlugin({
  name: 'shell',
  remotes: { catalog: 'catalog@https://catalog.example.com/remoteEntry.js' },
  shared: { react: { singleton: true }, 'react-dom': { singleton: true } },
});
const ProductList = React.lazy(() => import('catalog/ProductList'));

Общие зависимости

shared не даёт загрузить библиотеку несколько раз. singleton: true гарантирует один экземпляр (важно для React и контекста), requiredVersion задаёт допустимую версию.

Плюсы

  • Независимые релизы команд: remote обновляется без пересборки host.
  • Общие зависимости и меньше дублирования кода.
  • Постепенный переход с монолита.

Сложности

  • Согласование версий общих библиотек и риск рассинхронизации контрактов между командами.
  • Обработка недоступности remote (fallback, ErrorBoundary).
  • Единый стиль, маршрутизация, авторизация и коммуникация между приложениями.
  • Типизация удалённых модулей и тестирование интеграции.

Коротко для собеседования

Module Federation загружает модули чужих приложений в рантайме: remote экспортирует, host подключает через remoteEntry.js, общие библиотеки задаются в shared как singleton. Позволяет независимые релизы, но требует дисциплины версий и контрактов.

Другие вопросы раздела