Зачем нужен Module Federation и какие задачи решает
Зачем нужен Module Federation и какие задачи решает
Module Federation (MF) — механизм Webpack 5, который позволяет загружать и использовать модули из другого приложения во время выполнения (runtime). То есть один фронтенд может подключить код, собранный и задеплоенный отдельно, без пересборки всего продукта.
Проблема, которую MF решает
В больших SPA со временем появляются типовые боли:
- Монолитная сборка: любой маленький UI-фикс требует пересобрать и выкатить всё приложение.
- Долгие сборки и рост бандла: общие зависимости дублируются, стартовая загрузка тяжелеет.
- Сложная командная работа: много команд правят один репозиторий/пакет, растёт число конфликтов и связность релизов.
- Миграции “всё или ничего”: сложно постепенно переехать на новый фреймворк/архитектуру.
MF предлагает практичный компромисс: разделить продукт на независимые части, но при этом сохранить возможность переиспользовать код и зависимости.
Какой подход даёт Module Federation
В терминах MF обычно есть роли:
- Host (хост/контейнер) — приложение, которое подгружает удалённые модули.
- Remote (удалёнка/провайдер) — приложение, которое публикует часть своего кода для потребления.
- Shared dependencies — зависимости, которые можно делить, чтобы не грузить несколько копий (например, один
react).
Выглядит концептуально так:
[ Host (Shell) ] ---> подгружает ---> [ Remote A: Header ]
| [ Remote B: Checkout ]
└-------------------------------> [ Shared: react, ui-kit ]
Ключевые задачи, которые решает MF
-
Независимые релизы (decoupled deployments) Команда, отвечающая за “Корзину”, может выкатить обновление без релиза “Каталога” — хост подцепит новый remote при следующем заходе пользователя.
-
Микрофронтенды без жёсткой упаковки MF — один из самых “приземлённых” способов делать microfrontend: интеграция идёт через загрузку реального JS-модуля, а не через iframe или копирование артефактов.
-
Совместное использование зависимостей Можно избежать ситуации, когда на странице одновременно работают две копии одной библиотеки. Это снижает вес и риск конфликтов версий.
-
Переиспользование фич и UI-компонентов между приложениями Общие блоки (хедер, профиль, платежи, дизайн-система) можно публиковать как remote и подключать там, где нужно.
-
Постепенные миграции Позволяет переносить части приложения шаг за шагом: старый хост продолжает жить, а новые фичи приезжают как remotes.
MF в сравнении с альтернативами
| Подход | Что даёт | Типичный минус |
|---|---|---|
| Монолит | Простая интеграция | Релизы связаны, бандл растёт |
| Общая библиотека (npm-пакет) | Переиспользование кода | Нужно публиковать/обновлять версии и пересобирать потребителей |
| Copy-paste/дублирование | Быстро “прямо сейчас” | Расхождение логики, техдолг |
| Module Federation | Runtime-подключение модулей + шаринг зависимостей | Требует дисциплины версий и контрактов между командами |
<details> <summary>
Когда Module Federation особенно полезен
</summary>
- Несколько команд разрабатывают разные домены (каталог, корзина, аккаунт) и хотят независимые релизы.
- Есть платформа/экосистема: много приложений, которым нужны общие фичи.
- Важна скорость вывода изменений без пересборки всех потребителей.
- Нужно контролируемо уменьшать дубли зависимостей и вес загрузки.
</details>