0Pricing
Angular Academy · Aula

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 it

Verificaçã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

  1. Arquitetura de microsserviços de frontend
  2. Federação nativa para Angular
  3. Compartilhando dependências
  4. Carregando módulos remotos
← Voltar para Angular Academy