DEV Community

Hernani Almeida
Hernani Almeida

Posted on • Edited on

Desacoplando frontend com module-federation Angular - Parte 1

Ferramentas necessárias:

O conceito Micro frontends e permitir aos desenvolvedores a flexibilidade de solicitar remotamente um módulo na rede e inicializar esse módulo em sua aplicação, podendo assim separar responsabilidades de uma aplicação frontend em varias aplicações.
Os microfrontends podem ajudar os desenvolvedores a focar nos requisitos funcionais e nas necessidades de negócios.
Os microfrontends podem aumentar o reuso de código na empresa e simplificar o processo de desenvolvimento, deixando a aplicação com pouco acoplamento pois possibilita a cada aplicação dentro do ambiente ter sua própria versão, seu próprio framework, seu próprio deploy e no final para o usuário isso se reflete a 1 aplicação.
Construir uma plataforma para microfrontends é muito semelhante ao de uma plataforma para microservices.

Nesse artigo vamos construir um microfrontend utilizando o framework Angular onde através da aplicação main iremos acessar outras duas aplicações remotas utilizando a ferramenta module-federation, dito isso bora codar.

Crie uma pasta artigoMFE e atraves do terminal de sua maquina entre dentro desta pasta vamos criar 3 aplicações angular através do comando ng new mfe-host, após ng new mfe-1 e após ng new mfe-2.

Image description

Image description

Image description

Temos agora 3 projetos angular criado dentro da pasta artigoMFE, digite o seguinte comando cd mfe-host no terminal na raiz da pasta artigoMFE

Image description

Dentro da pasta mfe-host digite o seguinte comando para abrir a aplicação dentro do VSCODE code .

Image description

Ainda na pasta mfe-host digite o seguinte comando

ng add @angular-architects/module-federation --project mfe-host --port 4200 --type host --skip-confirmation 
Enter fullscreen mode Exit fullscreen mode

Esse comando ira instalar a biblioteca do module-federation em nossa aplicação e configurar o arquivo webpack da nossa aplicação.

Image description

Image description

Feito isso crie um arquivo app-routing.module.ts na sua aplicação de maneira que a estrutura fique o seguinte.

Image description

E altere os seguintes arquivos para ficar igual os arquivos abaixo.

app-routing.module.ts

import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import { loadRemoteModule } from '@angular-architects/module-federation'; const APP_ROUTES: Routes = [ { path: 'mfe-1', loadChildren: () => loadRemoteModule({ type: 'module', remoteEntry: 'http://localhost:4201/remoteEntry.js', exposedModule: './Module', }).then((m) => m.AppModule), }, { path: 'mfe-2', loadChildren: () => loadRemoteModule({ type: 'module', remoteEntry: 'http://localhost:4202/remoteEntry.js', exposedModule: './Module', }).then((m) => m.AppModule), }, ]; @NgModule({ imports: [RouterModule.forRoot(APP_ROUTES)], exports: [RouterModule], }) export class AppRoutingModule {} 
Enter fullscreen mode Exit fullscreen mode

app.module.ts

import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { AppComponent } from './app.component'; import { AppRoutingModule } from './app-routing.module.'; @NgModule({ declarations: [AppComponent], imports: [BrowserModule, AppRoutingModule], providers: [], bootstrap: [AppComponent], }) export class AppModule {} 
Enter fullscreen mode Exit fullscreen mode

app.component.html

<div> <p><a routerLink="/mfe-1">Acesse MFE-1</a></p> <p><a routerLink="/mfe-2">Acesse MFE-2</a></p> </div> <div> <router-outlet></router-outlet> </div> 
Enter fullscreen mode Exit fullscreen mode

Feito isso digite o seguinte comando no terminal npm run start para rodar a aplicação e clique no link abaixo:

Image description

Podemos ver na ferramenta da google na aba de Redes que nosso host tentou se comunicar a nossa aplicação remota mfe-1

Image description

No próximo artigo vamos implementar as aplicações remotas mfe-1 e mfe-2 para concluir nosso artigo, ate o próximo artigo

Deixo aqui meu linkedin e instagram para quem quiser me adicionar

Top comments (0)