Compartir dependencias
Compartir Angular y bibliotecas entre remotes
Compartir dependencias es una lección gratuita de Angular Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Angular Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Angular Academy incluye 4 lecciones en total.
Por qué compartir dependencias
Si el host y tres remotos incluyen cada uno su propia copia de Angular en el bundle, el navegador descarga Angular cuatro veces y, lo que es peor, termina con varias instancias de Angular que rompen la inyección de dependencias. Compartir garantiza que se cargue una única copia una vez y que todos la reutilicen.
La sección shared
En federation.config.js, el objeto shared declara qué dependencias se comparten entre el host y los remotos. Native Federation elimina las duplicaciones durante el tiempo de ejecución.
module.exports = withNativeFederation({
shared: {
...shareAll({ singleton: true, strictVersion: true }),
},
});Ayudante shareAll
shareAll() comparte todas las dependencias de package.json con una sola configuración, que es el punto de partida habitual. Después puede sobrescribir paquetes concretos.
shared: {
...shareAll({ singleton: true, strictVersion: true, requiredVersion: 'auto' }),
}singleton: por qué es importante para Angular
singleton: true fuerza a que exista exactamente una instancia de un paquete en toda la aplicación. El núcleo de Angular, RxJS y el enrutador DEBEN ser singletons; dos copias de @angular/core implican dos árboles de inyectores y errores durante el tiempo de ejecución.
Negociación de versiones
Cuando los remotos solicitan versiones diferentes, la federación elige una compatible. strictVersion: true genera un error si son incompatibles en lugar de cargar silenciosamente una versión no coincidente, lo que permite detectar los problemas pronto.
shared: {
'@angular/core': { singleton: true, strictVersion: true, requiredVersion: '^18.0.0' },
}Cómo compartir sus propias bibliotecas
Una biblioteca compartida de sistema de diseño o autenticación también debería ser un singleton para que el estado (como el usuario actual) sea coherente. Compártala explícitamente por nombre.
shared: {
'@myorg/design-system': { singleton: true, requiredVersion: 'auto' },
'@myorg/auth': { singleton: true },
}requiredVersion: auto
requiredVersion: 'auto' lee la versión de package.json para que no tenga que escribirla manualmente. Así la configuración permanece sincronizada al actualizar las dependencias.
Qué ocurre durante el tiempo de ejecución
Cada compilación genera metadatos sobre sus paquetes compartidos. Durante la carga, la federación compara las versiones entre el host y los remotos y sirve un único módulo compartido mediante el mapa de importación, de modo que el navegador lo obtiene una sola vez.
El coste de no compartir
Olvidar compartir Angular es el error clásico: la aplicación parece funcionar y después genera errores crípticos como «NG0203: inject() must be called from an injection context» porque existen dos copias de Angular. Compartirlo como singleton evita este problema.
Mantener las versiones alineadas
Los despliegues independientes pueden quedar desalineados. Los equipos deben acordar un rango compartido para los paquetes del framework y actualizarse de forma coordinada, porque un host con Angular 18 no puede compartir de forma segura con un remoto que necesite Angular 17.
Omitir un paquete compartido
En ocasiones, un remoto necesita su propia copia aislada de una utilidad pequeña. Puede excluirla del uso compartido para incluirla de forma privada en su bundle, aceptando el tamaño duplicado a cambio de independencia.
shared: {
...shareAll({ singleton: true }),
}
// skip a package by removing it from the shared map / excluding itComprobación rápida
¿Qué paquetes deben ser singletons?
Resumen
Declare las dependencias shared (a menudo mediante shareAll) para que el host y los remotos carguen una sola copia. Configure el framework y las bibliotecas con estado (@angular/core, el enrutador, RxJS y su biblioteca de autenticación) con singleton: true; use strictVersion y requiredVersion: 'auto' para detectar desajustes. No compartir Angular provoca errores de DI.
Preguntas frecuentes
¿La lección «Compartir dependencias» es gratis?
Sí — el texto completo de «Compartir dependencias» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Angular Academy, actualiza a CoddyKit PRO. El curso de Angular Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Compartir dependencias»?
Compartir Angular y bibliotecas entre remotes Practicas Angular Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Angular Academy?
No se requiere experiencia previa. Angular Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Compartir dependencias»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Angular Academy?
Sí. Cada lección de Angular Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Arquitectura de microfrontends
- Federación nativa para Angular
- Compartir dependencias
- Cargar módulos remotos