Compartilhando dependências
Compartilhe o Angular e bibliotecas entre módulos remotos.
Compartilhando dependências é uma aula grátis de Angular Academy no CoddyKit. Esta é a aula 3 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 Angular Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Angular Academy inclui 4 aulas no total.
Por que compartilhar dependências
Se o host e três remotos incluírem cada um sua própria cópia do Angular, o navegador baixará o Angular quatro vezes e, pior ainda, acabará com várias instâncias do Angular, o que rompe a injeção de dependências. O compartilhamento garante que uma única cópia seja carregada uma vez e reutilizada por todos.
A seção shared
Em federation.config.js, o objeto shared declara quais dependências são compartilhadas entre o host e os remotos. O Native Federation elimina as duplicatas em tempo de execução.
module.exports = withNativeFederation({
shared: {
...shareAll({ singleton: true, strictVersion: true }),
},
});Auxiliar shareAll
shareAll() compartilha todas as dependências do seu package.json com uma única configuração, o ponto de partida comum. Depois, você pode substituir a configuração de pacotes específicos.
shared: {
...shareAll({ singleton: true, strictVersion: true, requiredVersion: 'auto' }),
}singleton: por que isso é importante para o Angular
singleton: true força exatamente uma instância de um pacote em todo o aplicativo. O núcleo do Angular, o RxJS e o roteador MUST ser singletons; duas cópias de @angular/core significam duas árvores de injetores e erros em tempo de execução.
Negociação de versões
Quando os remotos solicitam versões diferentes, a federação escolhe uma versão compatível. strictVersion: true gera um erro quando há incompatibilidade, em vez de carregar silenciosamente uma versão divergente, revelando os problemas antecipadamente.
shared: {
'@angular/core': { singleton: true, strictVersion: true, requiredVersion: '^18.0.0' },
}Compartilhando suas próprias bibliotecas
Uma biblioteca compartilhada de sistema de design ou autenticação também deve ser um singleton, para que o estado (como o usuário atual) seja consistente. Compartilhe-a explicitamente pelo nome.
shared: {
'@myorg/design-system': { singleton: true, requiredVersion: 'auto' },
'@myorg/auth': { singleton: true },
}requiredVersion: auto
requiredVersion: 'auto' lê a versão do seu package.json, para que você não precise defini-la manualmente. Isso mantém a configuração sincronizada à medida que você atualiza as dependências.
O que acontece em tempo de execução
Cada compilação gera metadados sobre seus pacotes compartilhados. No momento do carregamento, a federação compara as versões entre o host e os remotos e disponibiliza um único módulo compartilhado por meio do mapa de importação, para que o navegador o busque apenas uma vez.
O custo de não compartilhar
Esquecer de compartilhar o Angular é o erro clássico: o aplicativo parece funcionar e depois gera erros enigmáticos como “NG0203: inject() must be called from an injection context”, porque existem duas cópias do Angular. Compartilhá-lo como singleton evita isso.
Mantendo as versões alinhadas
Implantações independentes podem se afastar umas das outras. As equipes devem concordar com um intervalo compartilhado para os pacotes do framework e atualizar as versões de forma coordenada, pois um host no Angular 18 não pode compartilhar com segurança com um remoto que exige o Angular 17.
Ignorando um pacote compartilhado
Às vezes, um remoto precisa de sua própria cópia isolada de um pequeno utilitário. Você pode excluí-lo do compartilhamento para que ele seja incluído no pacote de forma privada, aceitando o tamanho duplicado em troca da independência.
shared: {
...shareAll({ singleton: true }),
}
// skip a package by removing it from the shared map / excluding itVerificação rápida
Quais pacotes devem ser singletons?
Recapitulação
Declare as dependências shared (geralmente por meio de shareAll) para que o host e os remotos carreguem uma única cópia. Defina o framework e as bibliotecas com estado (@angular/core, roteador, RxJS, sua biblioteca de autenticação) como singleton: true; use strictVersion e requiredVersion: 'auto' para detectar divergências. Esquecer de compartilhar o Angular causa erros de DI.
Perguntas Frequentes
A aula “Compartilhando dependências” é grátis?
Sim — o texto completo de “Compartilhando dependências” é 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 Angular Academy, atualize para CoddyKit PRO. O curso de Angular Academy inclui 4 aulas no total.
O que vou aprender em “Compartilhando dependências”?
Compartilhe o Angular e bibliotecas entre módulos remotos. Você pratica Angular 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 Angular Academy?
Nenhuma experiência prévia é necessária. Angular 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 3 de 4.
Quanto tempo leva a aula “Compartilhando dependências”?
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 Angular Academy?
Sim. Cada aula de Angular 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
- Arquitetura de microsserviços de frontend
- Federação nativa para Angular
- Compartilhando dependências
- Carregando módulos remotos