Микрофронтенды представляют собой подход к разработке
фронтенд-приложений, при котором проект делится на независимые модули,
которые могут разрабатываться, тестироваться и деплоиться отдельно.
Основная цель — масштабируемость и изоляция кода.
Принципы построения
- Изоляция модулей – каждый микрофронтенд
представляет собой автономный компонент приложения с собственным стеком
технологий, зависимостями и жизненным циклом.
- Независимые деплои – изменение одного
микрофронтенда не требует пересборки всего приложения.
- Общий каркас – часто используется shell-приложение,
которое отвечает за маршрутизацию, глобальные состояния и интеграцию
отдельных микрофронтендов.
Интеграция микрофронтендов
Существует несколько подходов:
- iframe – классический метод полной изоляции, но
ограниченный в коммуникации между приложениями.
- Web Components – позволяет инкапсулировать HTML,
CSS и JS в компонент, который можно вставлять в любое приложение.
- Module Federation – современный подход на основе
Webpack 5, позволяющий загружать модули с удалённых серверов
динамически.
Пример интеграции через Module Federation:
// webpack.config.js
new ModuleFederationPlugin({
name: 'shell',
remotes: {
mfe1: 'mfe1@http://localhost:3001/remoteEntry.js',
},
});
В Angular это реализуется через динамический импорт модулей:
loadRemoteModule({
type: 'module',
remoteEntry: 'http://localhost:3001/remoteEntry.js',
exposedModule: './AppModule'
}).then(m => m.AppModule)
Коммуникация между
микрофронтендами
- События – глобальный EventBus или кастомные события
через DOM.
- Общие сервисы – shared services, которые находятся
в shell-приложении.
- API-шлюзы – отдельный слой для взаимодействия с
бекендом, что позволяет микрофронтендам быть полностью
независимыми.
Преимущества подхода
- Улучшенная масштабируемость команды: разные микрофронтенды могут
разрабатываться разными командами.
- Независимость стеков технологий: каждая команда может использовать
свой фреймворк или версию Angular.
- Быстрый деплой и обновления: можно обновлять отдельные
микрофронтенды без остановки всего приложения.
Ограничения и риски
- Усложнение маршрутизации и состояния – требуется
единый shell для управления навигацией.
- Дублирование зависимостей – без оптимизации может
увеличиваться размер бандла.
- Сложности в тестировании интеграций – необходимо
тщательно тестировать взаимодействие между микрофронтендами.
Микрофронтенд-архитектура обеспечивает гибкость и масштабируемость
крупных приложений, позволяя управлять сложностью за счёт изоляции и
независимого развертывания компонентов.