0Pricing
Angular Academy · Lezione

Condividere le dipendenze

Condividere Angular e le librerie tra i remoti

Condividere le dipendenze è una lezione Angular Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Angular Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Angular Academy include 4 lezioni in totale.

Perché condividere le dipendenze

Se l'host e tre remote includessero ciascuno una propria copia di Angular, il browser scaricherebbe Angular quattro volte e, cosa ancora peggiore, si ritroverebbe con più istanze di Angular che compromettono la dependency injection. La condivisione garantisce che una sola copia venga caricata una volta e riutilizzata da tutti.

La sezione shared

In federation.config.js, l'oggetto shared dichiara quali dipendenze vengono condivise tra host e remote. Native Federation elimina i duplicati a runtime.

module.exports = withNativeFederation({
  shared: {
    ...shareAll({ singleton: true, strictVersion: true }),
  },
});

Helper shareAll

shareAll() condivide con un'unica configurazione tutte le dipendenze presenti in package.json, costituendo un punto di partenza comune. In seguito può sovrascrivere i singoli pacchetti.

shared: {
  ...shareAll({ singleton: true, strictVersion: true, requiredVersion: 'auto' }),
}

singleton: perché è importante per Angular

singleton: true impone esattamente una sola istanza di un pacchetto nell'intera app. Angular core, RxJS e il router DEVONO essere singleton; due copie di @angular/core generano due alberi di injector e causano errori a runtime.

Negoziazione delle versioni

Quando i remote richiedono versioni diverse, la federation ne sceglie una compatibile. strictVersion: true genera un errore in caso di incompatibilità invece di caricare silenziosamente una versione non corrispondente, facendo emergere subito i problemi.

shared: {
  '@angular/core': { singleton: true, strictVersion: true, requiredVersion: '^18.0.0' },
}

Condividere le proprie librerie

Anche una libreria condivisa di design system o autenticazione dovrebbe essere un singleton, così lo stato, ad esempio l'utente corrente, rimane coerente. La condivida esplicitamente indicando il nome.

shared: {
  '@myorg/design-system': { singleton: true, requiredVersion: 'auto' },
  '@myorg/auth': { singleton: true },
}

requiredVersion: auto

requiredVersion: 'auto' legge la versione da package.json, evitando di inserirla manualmente. In questo modo la configurazione rimane sincronizzata quando aggiorna le dipendenze.

Che cosa succede a runtime

Ogni build genera metadati sui propri pacchetti condivisi. Al momento del caricamento, la federation confronta le versioni tra host e remote e fornisce un unico modulo condiviso tramite l'import map, così il browser lo scarica una sola volta.

Il costo della mancata condivisione

Dimenticare di condividere Angular è l'errore classico: l'app sembra funzionare, poi genera errori poco chiari come "NG0203: inject() must be called from an injection context" perché sono presenti due copie di Angular. Condividere Angular come singleton previene il problema.

Mantenere allineate le versioni

Le distribuzioni indipendenti possono divergere. I team dovrebbero concordare un intervallo di versioni condiviso per i pacchetti del framework e aggiornarli in modo coordinato, perché un host con Angular 18 non può condividere in sicurezza con un remote che richiede Angular 17.

Escludere un pacchetto condiviso

In alcuni casi un remote ha bisogno di una propria copia isolata di una piccola utility. Può escluderla dalla condivisione, così verrà inclusa privatamente nel bundle, accettando dimensioni duplicate in cambio dell'indipendenza.

shared: {
  ...shareAll({ singleton: true }),
}
// skip a package by removing it from the shared map / excluding it

Verifica rapida

Quali pacchetti devono essere singleton?

Riepilogo

Dichiari le dipendenze shared, spesso tramite shareAll, affinché host e remote carichino una sola copia. Imposti come singleton: true il framework e le librerie con stato, come @angular/core, router, RxJS e la libreria di autenticazione; utilizzi strictVersion e requiredVersion: 'auto' per rilevare le divergenze. Dimenticare di condividere Angular causa errori di DI.

Domande Frequenti

La lezione «Condividere le dipendenze» è gratuita?

Sì — il testo completo di «Condividere le dipendenze» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Angular Academy, passa a CoddyKit PRO. Il corso Angular Academy include 4 lezioni in totale.

Cosa imparerò in «Condividere le dipendenze»?

Condividere Angular e le librerie tra i remoti Eserciti Angular Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Angular Academy?

Non è richiesta alcuna esperienza precedente. Angular Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Condividere le dipendenze»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Angular Academy?

Sì. Ogni lezione Angular Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Architettura a micro frontend
  2. Native Federation per Angular
  3. Condividere le dipendenze
  4. Caricare moduli remoti
← Torna a Angular Academy