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 itVerifica 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
- Architettura a micro frontend
- Native Federation per Angular
- Condividere le dipendenze
- Caricare moduli remoti