Configurando aplicações React hospedeira e remotas
Configure exposições, módulos remotos e dependências compartilhadas em webpack.config.js para uma estrutura hospedeira e duas aplicações React remotas.
Configurando aplicações React hospedeira e remotas é uma aula grátis de React Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.
webpack.config.js da aplicação remota: ModuleFederationPlugin
A aplicação remota adiciona o ModuleFederationPlugin à configuração do webpack com três propriedades fundamentais: name, um identificador exclusivo, por exemplo, "buttonApp"; filename, "remoteEntry.js", a saída do manifesto; e exposes, um mapa do nome público para o caminho do arquivo de origem.
Disponibilizando componentes da aplicação remota
A configuração exposes mapeia um caminho de módulo público para um arquivo local: { './Button': './src/Button' }. Isso significa que a aplicação hospedeira pode importar 'buttonApp/Button' e receber o componente de ./src/Button.tsx. Você pode disponibilizar vários componentes, utilitários ou até páginas completas.
Configuração compartilhada na aplicação remota
A propriedade shared informa ao Module Federation quais módulos devem ser compartilhados entre a aplicação hospedeira e a remota, em vez de duplicados. Para o React: shared: { react: { singleton: true, requiredVersion: deps.react }, 'react-dom': { singleton: true } }. singleton:true impede que várias instâncias sejam carregadas simultaneamente.
webpack.config.js da aplicação hospedeira: referenciando aplicações remotas
A configuração do ModuleFederationPlugin da aplicação hospedeira inclui uma propriedade remotes: { buttonApp: 'buttonApp@http://localhost:3001/remoteEntry.js' }. A chave é o espaço de nomes da importação; o valor combina o nome e a URL da aplicação remota com @, informando ao Webpack onde buscá-la em tempo de execução.
Consumindo a aplicação remota no React
No código React da aplicação hospedeira, importe o componente remoto com uma importação dinâmica: const Button = React.lazy(() => import('buttonApp/Button')). O caminho da importação corresponde ao espaço de nomes da aplicação remota e ao nome do módulo disponibilizado. React.lazy divide o código da importação e o carrega de forma assíncrona.
Envolvendo com Suspense
Como os módulos remotos são carregados de forma assíncrona, sempre envolva o componente remoto importado de forma adiada em um limite Suspense: Suspense fallback=Loading... /. A alternativa é renderizada enquanto o Module Federation busca o remoteEntry.js e o bloco do componente na URL da aplicação remota.
Por que as instâncias únicas são essenciais
Os ganchos do React, como useState, useContext e useEffect, dependem de uma única instância interna do React para acompanhar o estado do componente. Se a aplicação hospedeira e a remota carregarem suas próprias cópias do React, os ganchos lançarão erros de "chamada de gancho inválida". singleton:true força o compartilhamento de uma única instância do React, resolvendo completamente essa classe de erros.
Resolução de conflitos de versão
Quando a aplicação hospedeira utiliza react@18.2.0 e a remota utiliza react@18.3.0, o escopo compartilhado do Module Federation negocia qual versão usar. Com singleton:true e requiredVersion, normalmente ele utiliza a versão mais alta, se for compatível. Definir requiredVersion: '>=18.0.0' em vez de uma versão fixa permite intervalos de versões flexíveis.
TypeScript: declarações de módulos
O TypeScript não conhece os módulos remotos em tempo de compilação, portanto importações como import('buttonApp/Button') gerarão erros de tipo sem declarações. Utilize @module-federation/typescript ou crie manualmente arquivos .d.ts que declarem os tipos dos módulos, obtendo segurança de tipos para as propriedades dos componentes remotos.
Testando a configuração localmente
Execute as duas aplicações simultaneamente: a aplicação remota na porta 3001 e a aplicação hospedeira na porta 3000. Abra a aplicação hospedeira — o ambiente de execução do Module Federation buscará http://localhost:3001/remoteEntry.js, descobrirá o módulo Button, baixará o bloco correspondente e o renderizará dentro da aplicação hospedeira como se fosse um componente local.
Configuração da URL de produção
Em produção, substitua localhost:3001 pela URL implantada da aplicação remota. Um padrão comum é utilizar uma variável de ambiente para a URL da aplicação remota, permitindo que a integração e a entrega contínuas injetem a URL correta para cada ambiente: buttonApp: 'buttonApp@' + process.env.BUTTON_REMOTE_URL + '/remoteEntry.js'.
Módulos compartilhados como instância única
Por que o React deve ser configurado como uma instância única na configuração compartilhada do Module Federation?
Recapitulação da lição
Configurar o Module Federation exige o ModuleFederationPlugin tanto na aplicação remota, com name, filename e exposes, quanto na aplicação hospedeira, com remotes. Consuma componentes remotos por meio de React.lazy e de uma importação dinâmica envolvida em Suspense. O React e o React DOM devem ser instâncias únicas compartilhadas para evitar erros de ganchos causados por várias instâncias. Declarações do TypeScript e URLs de aplicações remotas definidas por variáveis de ambiente completam uma configuração pronta para produção.
Perguntas Frequentes
A aula “Configurando aplicações React hospedeira e remotas” é grátis?
Sim — o texto completo de “Configurando aplicações React hospedeira e remotas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.
O que vou aprender em “Configurando aplicações React hospedeira e remotas”?
Configure exposições, módulos remotos e dependências compartilhadas em webpack.config.js para uma estrutura hospedeira e duas aplicações React remotas. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar React Academy?
Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Configurando aplicações React hospedeira e remotas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de React Academy?
Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Federação de módulos: importações dinâmicas em tempo de execução
- Configurando aplicações React hospedeira e remotas
- Compartilhando estado e roteamento entre remotos
- Versionamento, implantação e orquestração