Angular 15: fin de soporte y cómo actualizar
Angular 15 dejó estables las APIs standalone y pasó Angular Material a componentes basados en MDC. No tiene soporte desde mayo de 2024.
Fechas de lanzamiento y soporte
Angular 15 se publicó en noviembre de 2022. El soporte activo terminó en mayo de 2023 y el soporte de largo plazo terminó en mayo de 2024. Hoy no recibe parches de seguridad. Las fechas de cada versión están en Soporte y fin de vida de las versiones de Angular.
Qué introdujo Angular 15
- APIs standalone estables. Los componentes, directivas y pipes standalone salieron de developer preview, y una app puede arrancar con
bootstrapApplication. - APIs standalone tree-shakable para el router y HttpClient, como
provideRouter. - La directive composition API, que agrega directivas a un host con
hostDirectives. - Una directiva de imágenes estable.
NgOptimizedImagesalió de developer preview. - Guards funcionales en el router, y rutas lazy que resuelven los default exports.
- Componentes de Angular Material basados en MDC. Muchos componentes recibieron una nueva estructura de DOM y nuevos estilos. Las implementaciones anteriores quedaron disponibles como imports
legacydeprecados. - Una salida de
ng newmás simple, sin los archivostest.ts,polyfills.tsnienvironments. - Deprecaciones:
providedIn: 'any'yprovidedIncon un NgModule. El equipo también anunció el fin de las versiones nuevas de@angular/flex-layout.
Qué revisar al actualizar
De 15 a 16:
- Se requieren Node.js 16.14 o 18.10 y posteriores, TypeScript 4.9.3 o posterior y Zone.js 0.13 o posterior.
- Se elimina ngcc, así que las librerías compiladas con View Engine dejan de funcionar.
- Se eliminan estas APIs:
entryComponents,ANALYZE_FOR_ENTRY_COMPONENTS,ReflectiveInjector,renderModuleFactoryyBrowserTransferStateModule. XhrFactorydebe importarse desde@angular/common.- Las pruebas reciben
MockPlatformLocationpor defecto, y las pruebas que simulanActivatedRoutepueden necesitar cambios.
De 16 a 17:
- Se requieren Node.js 18.13 o posterior, TypeScript 5.2 o posterior y Zone.js 0.14 o posterior.
- Los componentes legacy de Angular Material no forman parte de Material 17. Angular 17 puede correr con Material 16 como opción temporal que termina con la v18.
- Los imports profundos de Zone.js como
zone.js/dist/zonedeben pasar azone.jsyzone.js/testing. - Las opciones del router como
urlUpdateStrategyyparamsInheritanceStrategyse configuran conprovideRouteroRouterModule.forRoot. Ya no son propiedades públicas deRouter. NgSwitchcompara con===.- Los estilos de los componentes destruidos se eliminan de forma automática.
Un plan corto de actualización
- Actualiza al último parche de 15.2.x, confirma que el build y las pruebas pasan, y haz commit.
- Reemplaza o actualiza cada librería que todavía distribuye código de View Engine antes del paso a la v16.
- Ejecuta
ng update @angular/core@16 @angular/cli@16y luegong update @angular/material@16. - Migra los imports
legacyde Material a los componentes MDC antes de la v17. - Actualiza las librerías de terceros, corrige las deprecaciones, corre las pruebas y publica.
- Repite con la siguiente versión mayor. La siguiente parada es Angular 16.
Cuándo conviene pedir ayuda
Una app en la v15 que todavía importa componentes legacy de Material tiene un plazo dentro de la actualización: esos componentes salen del paquete en la v17. Conviene pedir ayuda si muchas pantallas dependen de ellos, si la app usa mucho @angular/flex-layout, o si la actualización también debe entregar el paso a componentes standalone. El plan está en Estrategia para actualizar versiones antiguas de Angular. Para una plataforma repartida entre varios equipos, mira Reescribir, híbrido o microfrontends.
Más en esta sección
- Angular 16: fin de soporte y cómo actualizar
- Angular 17: fin de soporte y cómo actualizar
- Angular 18: fin de soporte y cómo actualizar
- Angular 19: fin de soporte y cómo actualizar
¿Planeas una migración o una plataforma de microfrontends?
En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.
Escríbeme por LinkedIn