Микрофронтенд-архитектура предполагает разбиение большого фронтенд-приложения на независимые части, каждая из которых может разрабатываться, тестироваться и развёртываться отдельно. Angular хорошо подходит для этой модели благодаря модульности и поддержке современных стандартов сборки.
На практике применяются несколько стратегий:
Наиболее распространённый вариант — Module Federation, так как он интегрируется в стандартный Angular CLI.
Для каждого микрофронтенда используется отдельный Angular-проект. В
webpack.config.js настраивается экспорт модулей:
new ModuleFederationPlugin({
name: 'orders',
filename: 'remoteEntry.js',
exposes: {
'./Module': './src/app/orders/orders.module.ts'
},
shared: {
'@angular/core': { singleton: true },
'@angular/common': { singleton: true },
'@angular/router': { singleton: true }
}
})
Главное приложение (host) подключает удалённые модули динамически.
Маршрутизация строится через loadChildren:
{
path: 'orders',
loadChildren: () =>
loadRemoteModule({
remoteEntry: 'https://orders.app/remoteEntry.js',
remoteName: 'orders',
exposedModule: './Module'
}).then(m => m.OrdersModule)
}
Такой механизм позволяет загружать код только при необходимости, снижая начальный размер бандла.
Каждый микрофронтенд собирается и деплоится отдельно:
Главное приложение знает только URL remoteEntry.js, что
позволяет обновлять части системы без пересборки хоста.
Критически важно избегать дублирования Angular-библиотек. Используются:
singleton: truestrictVersion: truepackage.jsonЭто предотвращает конфликты зон, инжекторов и роутеров.
Для предотвращения побочных эффектов применяются:
Каждый микрофронтенд должен рассматриваться как автономное приложение внутри общего контейнера.
Часто используется схема:
Host-приложение остаётся неизменным, что снижает риски при обновлениях.
Для контроля используются:
Разделение ответственности упрощает диагностику проблем и масштабирование команды.
Микрофронтенды в Angular позволяют строить крупные системы с высокой степенью независимости, сохраняя при этом единый технологический стек и согласованный пользовательский опыт.