Nem tudo precisa de Micro Frontends, as vezes você só precisa de Web Components
Tags: webdev, webcomponents, microfrontend, javascript
Published: 2024-07-01 13:01:48

Micro Frontends se tornaram uma das Buzzwords mais atrativas do desenvolvimento frontend moderno, e não é por menos, soluções como o Module Federation trouxeram uma possibilidade que foi procurada por aproximadamente 10 anos e fez o "Micro Services" de fato funcionar no frontend.

Mas Micro Frontends, assim como mono-repos, não é uma bala de prata,  uma solução para toda e qualquer problema. A maior parte dos casos que necessitam de fato de Micro Frontends são por questões organizacionais, escalabilidade ou aplicações que precisam crescer, talvez rapido demais, e que agora precisam ser quebradas para serem "feitas do jeito certo".
Não vou negar, eu gosto muito de Micro Frontends, não é a toa que fiz meu mestrado em cima do tema, o primeiro no Brasil, mostrando seu uso na prática solucionando um problema de mais de 3 anos na mais importante empresa de agronegócio do país. Mas será que você precisa mesmo de Micro Frontends?


Alguns meses atrás auxiliei um amigo num impasse sobre isso: "Alan precisamos de uma solução de integração e tudo que eu vejo nos direciona para micro frontends", o cenário: 
Múltiplas aplicações, em diferentes frameworks, algumas até sem framework, precisam ter um mesmo componente, digamos que algo que gerencia a autenticação do usuário, uma espécie de "SSO". 
Você certamente está pensando que isso é o caso mais óbvio e claro de Micro Frontends, e nisso eu te pergunto, como você vai fazer para integrar casos que não utilizam Webpack/Vite, ouu até mesmo um bundler/builder? Fazer o RequireJS, JQuery, Backbone, Ember,  AngularJS (v1),Vue versões 1, 2 e 3, Nuxt, React, e aplicações que utilizem PHP ou JS, e em alguns casos até aplicações Desktop com Electron… ajustar tudo para usar micro frontends? Imagine ter que adaptar build, adicionar bundler, ajustar roteamento de servidor… e mais um mundaréu de coisas para usar Microfrontends…. Viu nem sempre o óbio é tão óbvio.

Então eu te pergunto: que tecnologia existe que "rode" em todos os navegadores e que seria possível utilizar em todos os casos acima? Claro, JavaScript + HTML, e que maneira você possui de fazer isso de forma otimizada, encapsulada e que possa ser compartilhado independente de bundler, até mesmo utilizando  importações e links diretos? Web Components, eu sei que além disso você está pensando, mas eu vou ter que "copiar" esse componente para dentro de TODAS as aplicações, vai ser o mesmo "inferno" toda vez um trabalho manual, quando atualizar ou mudar a versão… O problema da modernidade é que pensamos que ela resolve problemas que nós mesmo criamos. Antigamente quando "tudo era mato" na internet, toda solução de problema era: HTML + JavaScript e CDN. E acreditem, essa continua sendo uma solução mágica.

Você precisa de uma solução ou componente que rode em qualquer aplicação web independente de framework ou render? Web Components.
Você precisa compartilhar esse componente em tempo real sem a necessidade de atualizar suas aplicações quando atualizar uma versão? Content Delivery Network - CDN.

Nada de avançado, novo ou absurdo, apenas utilizando tudo o que já existe na Web, da maneira correta.