Module Federation — механизм динамического разделения приложений и совместного использования модулей между несколькими сборками Webpack. Он позволяет Angular-приложениям загружать код друг друга на лету без необходимости сборки всего проекта вместе.
// webpack.config.js host
new ModuleFederationPlugin({
remotes: {
remoteApp: 'remoteApp@http://localhost:4201/remoteEntry.js'
}
})
ModuleFederationPlugin:new ModuleFederationPlugin({
name: 'remoteApp',
filename: 'remoteEntry.js',
exposes: {
'./ButtonModule': './src/app/button/button.module.ts'
}
})
Host-приложение импортирует их динамически:
loadRemoteModule({
remoteEntry: 'http://localhost:4201/remoteEntry.js',
remoteName: 'remoteApp',
exposedModule: './ButtonModule'
}).then(m => m.ButtonModule)
@angular-architects/module-federation.ng add @angular-architects/module-federation
webpack.config.js прописываются shared
зависимости, чтобы избегать дублирования библиотек:shared: {
'@angular/core': { singleton: true, strictVersion: true },
'@angular/common': { singleton: true, strictVersion: true },
'@angular/router': { singleton: true, strictVersion: true }
}
Module Federation в Angular открывает возможности микрофронтенд-архитектуры, позволяя создавать масштабируемые и гибкие приложения с независимыми обновлениями модулей.