Nuxt
@module-federation/nuxt é um módulo do Nuxt que integra o Module Federation a hosts e remotes Nuxt. Ele usa o @module-federation/vite com o builder Vite padrão do Nuxt, ou o @module-federation/enhanced/rspack quando a aplicação usa o builder Rspack. Assim, você configura a federação uma única vez no nuxt.config.ts, independentemente do builder.
O @module-federation/nuxt ainda está em beta, e sua API pode mudar enquanto a integração se estabiliza. Relate bugs e casos extremos em module-federation/nuxt.
Suporte
- Nuxt
>=4.5.1com o builder Vite padrão ou um@nuxt/rspack-builderde versão correspondente - Node.js
^22.18.0,^24.11.0ou>=26.0.0 - Componentes remotos renderizados no servidor, em desenvolvimento e em produção, em deploys Node com sistema de arquivos gravável
- Exposes de componentes por convenção a partir de
~/components/exposed - Componentes Vue remotos registrados nos auto-imports de templates do Nuxt
vueevue-routercompartilhados como singletons por padrão
Instalação
Instale o módulo tanto no host quanto no remote:
Configurar um remote
Registre o módulo e dê a cada container publicado um nome único:
Os componentes colocados em app/components/exposed são expostos automaticamente. Por exemplo, app/components/exposed/ProductCard.vue é exposto aos hosts como ./ProductCard.
Você também pode configurar exposes diretamente. Caminhos relativos são resolvidos a partir da raiz da aplicação Nuxt:
Configurar um host
O componente exposto fica então disponível por meio dos auto-imports de componentes do Nuxt:
Durante o setup, o módulo busca o mf-manifest.json de cada remote e registra seus exposes de componentes. remoteComponents é a lista de fallback usada quando o manifest não pode ser acessado, por exemplo quando o remote é publicado separadamente do build do host.
Prefira URLs de manifest em hosts com SSR: o runtime usa o manifest para escolher o entry do navegador ou do servidor e consegue detectar um novo build de servidor sem reiniciar o host.
Nomes dos componentes
Com um único remote, ./ProductCard vira RemoteProductCard. Com vários remotes, o nome do remote é incluído para evitar colisões, então catalog/ProductCard vira RemoteCatalogProductCard.
Apenas exposes cujos nomes começam com uma letra e contêm letras, números, underscores ou hífens são registrados como componentes do Nuxt. Os demais exposes continuam disponíveis por meio de imports normais em runtime.
Renderização no servidor
Por padrão, os componentes remotos são renderizados no servidor do Nuxt. Um remote de produção publica tanto o remoteEntry.js para o navegador quanto o remoteEntry.ssr.js para o servidor; o host carrega o entry de servidor durante a renderização, inclui o HTML do remote na resposta e faz a hidratação do mesmo componente no navegador.
O loader de SSR padrão grava os módulos baixados em node_modules/.ssr-cache, abaixo do diretório de trabalho do servidor. Em deploys somente leitura ou serverless, desative o SSR de remotes:
Se um remote falhar durante uma requisição no servidor, o host renderiza um fallback vazio para essa requisição, de modo que a página continue respondendo, e as requisições seguintes tentam carregar o remote novamente.
O SSR de remotes executa o entry de servidor do remote com os privilégios do processo do host. Configure apenas remotes confiáveis e use URLs HTTPS diretas em produção.
Dependências compartilhadas
Quando config.shared não está definido, vue e vue-router são compartilhados como singletons usando as versões instaladas. Defina config.shared para substituir esses padrões:
Usar o builder Rspack
O Vite é o padrão. Para usar o Rspack, instale o @nuxt/rspack-builder na mesma versão do Nuxt e defina builder: 'rspack' na aplicação:
Os dois builders usam a mesma configuração moduleFederation e conseguem consumir os manifests um do outro. Opções exclusivas do Vite, como hostInitInjectLocation, são ignoradas pelo Rspack.
Opções
Configure estes valores em moduleFederation no nuxt.config.ts:
Consulte a referência do pacote para componentes remotos tipados, exports de aplicações Bridge e o contrato completo de deploy.
Exemplos
- Aplicações de exemplo do module-federation/nuxt: hosts e remotes com Vite e Rspack
- Host e remote Nuxt: Nuxt 4 com componentes remotos renderizados via SSR