Angular Module Federation com Servidor-Side Rendering
Historically, Module Federation was limited para Cliente-Side Rendering (CSR), primarily benefiting Single Page Applications (SPAs). However, o evolving web desenvolvimento landscape has increasingly favored Servidor-Side Rendering (SSR) for its myriad benefits.
Nx's Push em SSR com Module Federation (De Versão 15.4)
Com o advent de versão 15.4, Nx has introduced Module Federation com SSR suporte, marking uma significant milestone. Este fusion de Module Federation e SSR em Nx Workspaces leverages o strengths de both technologies.
For uma comprehensive understanding de Nx e its integração com Module Federation, nós highly recommend consulting o official Nx documentation. It offers em-depth insights e practical guidance para effectively leverage these technologies. Você pode access este valuable recurso here:
Este guia é focused on guiding você por meio do configuração de Module Federation com Servidor-Side Rendering specifically for Angular aplicações.
How It Works
Em uma traditional SSR aplicação, o servidor é responsible for renderização a aplicação based no rota requested pelo navegador. Quando combining Module Federation com SSR, este concept é expanded. Se uma rota points para um módulo remoto, o host servidor delegates o rota processing para o remote servidor, que then renders o HTML e sends it back para o navegador.
Este integração não apenas harnesses o full potential de SSR but também maintains o flexibility de dividing o build em smaller segments. It facilitates independent implantação de features within a aplicação, allowing updates para o remote servidor sem necessitating uma full redeployment do host servidor.
Step-by-Step Guia
We'll começa by criação uma aplicação host chamado 'dashboard' e uma aplicação remote chamada 'login'.
Criação o Nx Workspace
Begin by executing o seguintes comando para criar uma nova Nx workspace:
During este process, você'll encounter prompts regarding o workspace tipo e preset.
Respond para o prompts as follows:
Opting for Nx Cloud (Opcional)
While setting up your workspace, você'll também ser asked about adding Nx Cloud. Este guia doesn't cover Nx Cloud, but its integração com Module Federation é advantageous for shared caching across teams e CI, enhancing build times. Learn mais about Nx Cloud at Nx Cloud Website.
Installing Nx Angular Plugin
Depois criação o workspace, navigate para it:
Instale o Official Nx Angular Plugin:
Generating o Aplicações
Use uma single comando para scaffold your Module Federation architecture com SSR:
Este comando generates two Angular Universal (SSR) aplicações e configures Webpack for both navegador e servidor com Module Federation.
Serving o Aplicações
- To serve o 'dashboard' (host) e 'login' (remote) aplicações, run:
Este builds o navegador e servidor bundles para o 'login' aplicação e runs it usando Node.js. Note esse o 'login' aplicação runs sem arquivo watchers, so changes em its code won't automatically reflect.
Caching e Real-Time Updates
- Nx caches o build do navegador e servidor bundles para o 'login' aplicação. On subsequent runs, it usa este cache instead de rebuilding a aplicação.
- For o 'dashboard' aplicação, o servidor build includes arquivo watchers, enabling real-time updates para o code.
Verifying o Configuração
- Upon successful compilation, você'll see uma success message indicating o servidor's listening address, typically
http://localhost:4200. - Open este address em your navegador e inspect o Network tab em DevTools.
Module Federation em Action
- Initially, Angular Universal vai handle renderização, e subsequent navigation vai switch para Cliente-Side Rendering (CSR).
- Navigating para http://localhost:4200/login vai reveal o servidor-rendered HTML para o login page, showcasing Module Federation's ability para resolve e render módulos de remote servers.
Live Updates para o Login Aplicação
Se você são actively working no 'login' aplicação e precisa see o results de your changes em real time, você pode habilite servidor rebuilds upon code modification. Este pode ser achieved by usando o devRemotes flag:
Usando este comando, o servidor vai rebuild o 'login' aplicação whenever você make changes, allowing para um iterative e efficient desenvolvimento process.