ng new user-dashboard
ng new admin-panel
ng new product-page
npm install @angular-architects/module-federation
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
module.exports = {
plugins: [
new ModuleFederationPlugin({
name: "userDashboard",
filename: "remoteEntry.js",
exposes: {
'./UserComponent': './src/app/user/user.component.ts',
},
}),
],
};
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");
module.exports = {
plugins: [
new ModuleFederationPlugin({
remotes: {
userDashboard: "userDashboard@http://localhost:4201/remoteEntry.js",
adminPanel: "adminPanel@http://localhost:4202/remoteEntry.js",
productPage: "productPage@http://localhost:4203/remoteEntry.js",
},
}),
],
};
import { loadRemoteModule } from '@angular-architects/module-federation';
loadRemoteModule({
remoteEntry: 'http://localhost:4201/remoteEntry.js',
remoteName: 'userDashboard',
exposedModule: './UserComponent',
}).then((m) => {
// Use the loaded module or component
});
we can use this above code in routing app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { loadRemoteModule } from '@angular-architects/module-federation';
const routes: Routes = [
{
path: 'user-dashboard',
loadChildren: () =>
loadRemoteModule({
remoteEntry: 'http://localhost:4201/remoteEntry.js',
remoteName: 'userDashboard',
exposedModule: './UserComponent',
}).then(m => m.UserComponent),
},
// Other routes...
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
or in component
import { Component, OnInit } from '@angular/core';
import { loadRemoteModule } from '@angular-architects/module-federation';
@Component({
selector: 'app-root',
template: '<h1>Microfrontend Shell</h1><ng-container *ngComponentOutlet="userComponent"></ng-container>',
})
export class AppComponent implements OnInit {
userComponent: any;
ngOnInit() {
loadRemoteModule({
remoteEntry: 'http://localhost:4201/remoteEntry.js',
remoteName: 'userDashboard',
exposedModule: './UserComponent',
}).then(m => {
this.userComponent = m.UserComponent;
});
}
}