Como implementar micro-frontend's usando Next.JS e module federation
Créditos pela imagem: https://www.toptal.com/front-end/micro-frontends-strengths-benefits

Como implementar micro-frontend's usando Next.JS e module federation

Antes de iniciarmos, você deve saber que é são micro frontend’s.


Micro-frontend’s são uma arquitetura de aplicações em que uma aplicação é dividida em pequenos módulos independentes, cada um gerenciado por equipes separadas e implementado com tecnologias diferentes.


Cada micro-frontend é responsável por uma parte específica da funcionalidade da aplicação e é integrado no frontend final como um componente isolado. Isso permite que as equipes trabalhem de forma autônoma e aumente a escalabilidade e a manutenibilidade da aplicação.


Pré requisitos

Nós usaremos o module federation, que é um tecnologia do webpack v5. Ele irá permitir construir várias aplicações e executa-las como se fosse apenas uma.


Nós iremos construir três micro-frontends Next.JS. Iremos expor um componente no primeiro micro-frontend, e expor uma função em comum no segundo. E para finalizar, o terceiro consumirá todos os outros dois microfrontend’s.


Implementação

É necessário que sua aplicação Next.js deve ser a versão superior a v10.2 para suportar o webpack 5. Neste tutorial usaremos o Next 13 (sem o app dir).


Criando projeto

Antes de mais nada, criaremos nossas aplicações com os comandos:


npx create-next-app@latest --typescript heade

npx create-next-app@latest --typescript consumerr        


Instalando lib’s necessárias

Em cada um dos projetos, você irá instalar o a lib @module-federation/nextjs-mf. Para isso use o comando abaixo:

npm i @module-federation/nextjs-mf
        

Lembre-se de fazer isso nos dois projetos (consumer e header)


Mão na massa

No primeiro, criaremos um componente de Header bem simples. Crie um pasta components dentro da pasta src, e dentro da mesma crie um arquivo chamado Header.tsx, e dentro dele colocaremos este conteúdo (ou o que preferir):


export function Header() 

 return (

  <header

   style={{

    backgroundColor: "#090909",

    color: "white",

    height: "80px",

    display: "flex",

    justifyContent: "space-around",

    alignItems: "center",

   }}

  >

   Logo

   <ul>

    <li>Home</li>

   </ul>

  </header>

 );

}{        

Após fazermos isso, iremos permitir que este componente seja usado por outros micro-frontends. Para isso, precisaremos ir no nosso next.config.js e alterar nossa configuração, ficando:


/** @type {import('next').NextConfig} *

const NextFederationPlugin = require("@module-federation/nextjs-mf");




module.exports = {

 webpack(config, options) {

  const { webpack } = options;

  Object.assign(config.experiments, { topLevelAwait: true });

  if (!options.isServer) {

   config.plugins.push(

    new NextFederationPlugin({

     name: "header", // nome do micro-frontend




     filename: "static/chunks/remoteEntry.js",

     exposes: {

      "./component/Header": "./src/components/Header.tsx",

     },

     shared: {},

    })

   );

  }




  return config;

 },

};/        


Finalizando este passo, iremos no nosso micro-frontend consumer, e criaremos um arquivo chamado index.tsx (que será nossa página index), e adicionaremos o seguinte conteúdo:


import dynamic from "next/dynamic"


const Header = dynamic(

 () => import("header/component/Header").then((m) => m.Header),

 {

  ssr: false,

 }

);




export default function Home() {

 return (

  <>

   <h1>Micro-frontends Next JS </h1>




   <Header />

  </>

 );

};        


Incrível! Está quase tudo pronto..Agora, provavelmente você irá se deparar com este erro:

Não foi fornecido texto alternativo para esta imagem
Erro cannot find module

E agora? Muito simples! Vamos criar uma pasta chamada @types, e dentro dela criaremos um arquivo com o nome module.d.ts, e dentro dele declararemos o modulo ‘inexistente’, ficando algo como:

declare module "header/component/Header";        


Feito isso, o erro irá sumir (typescript eu te amo)


Repositório: https://github.com/Santosl2/microfrontends-nextjs


Agora você possui um conhecimento básico de como implementar um micro-frontend. Vale ressaltar que existem outras formas de implementar micro-frontend’s, essa foi apenas uma delas.


Referências

https://www.npmjs.com/package/@module-federation/nextjs-mf

Felipe Matheus

Desenvolvedor Full Stack | React | React Native | Node

2y

Fera demais, mano. Sempre adquiro bons conhecimentos com seu conteúdo. 👏

Giovanni Pinheiro Janial

Engenheiro de Software Back-end Pleno | NodeJS | TypeScript | Python | AWS

2y

Manja muito! Parabéns 👊

Matheus Lima Ribeiro

Desenvolvedor Front-end Javascript | React | Vue | Next.js | Node.js

2y

Você é muito bom no que faz mano, parabéns!!

Luiz Phelipe Silva

Backend Developer @ AlliedBrasil | Node.js | Typescript | AWS | GCP

2y

bem demais!

To view or add a comment, sign in

More articles by Matheus Filype

  • Import vs import type no Typescript

    Introdução Quem aí nunca se deparou com um import type no código e se perguntou quais as principais diferenças (além…

  • Deixando componentes React mais escaláveis #1

    Introdução Se você é um DEV Frontend que utiliza React, provavelmente 70% do seu tempo (ou até mais) é desenvolvendo…

  • Separation of Concerns (SoC) no React

    Introdução React é uma biblioteca Javascript usada para construir interfaces de usuário. É de suma importância que…

  • Dominando a Especificidade de CSS

    Quando se trata de estilizar páginas da web com CSS, é essencial entender a especificidade dos seletores. A…

  • O que é React Automatic Batching

    Você já ouviu falar em Automatic Batching no React? Se não, vou te explicar AGORA o que é! O que é Batching? Antes de…

  • Performando suas aplicações React

    Está publicação foi retirada do meu blog diretamente para o Linkedin. O React é uma biblioteca que tem crescido…

Others also viewed

Explore topics