Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for Actualizando a Angular 20
Angular Firebase profile imageAntonio Cardenas
Antonio Cardenas forAngular Firebase

Posted on • Edited on

     

Actualizando a Angular 20

Esta es una guía práctica enfocada en lo que realmente importa al actualizar una aplicación del mundo real: qué se rompe, qué facilita tu trabajo y cómo deberías adaptar tu estilo de desarrollo.

1. La Historia Completa Detrás de la Eliminación de Karma: Más Allá de una Compilación Rota

El problema inmediato al actualizar es queng test fallará. La razón es un cambio fundamental en las herramientas de compilación de Angular.

Ya que un framework moderno requiere test runners modernos.

¿Por qué Angular eliminó Karma?

Con Angular 20, el paquete de compilación predeterminado cambia de@angular-devkit/build-angular al nuevo@angular/build. Este nuevo paquete ya no incluye el plugin de Karma utilizado por las configuraciones de prueba heredadas. El ecosistema web ha avanzado hacia test runners más rápidos como Vitest y Jest, que utilizan herramientas modernas como Vite y esbuild. Karma se había convertido en un cuello de botella.

Cómo es el nuevo panorama (Vitest/Jest)

El test runner experimental de Angular, ahora impulsado por Vitest, es el futuro. Migrar significa que tus pruebas unitarias se ejecutarán en un entorno rápido y moderno basado en Node.js.

La "solución temporal" explicada

Este comando obliga a la CLI a volver al compilador antiguo que todavía soporta Karma. Es un puente de compatibilidad, pero el mensaje es claro: deberías empezar a planificar tu migración a Jest or Vitest pronto.

npminstall @angular-devkit/build-angular--save-dev
Enter fullscreen modeExit fullscreen mode

2. Prerrequisitos

Antes de comenzar el proceso de actualización, asegúrate de cumplir con los siguientes requisitos:

  • Node.js: Versión20.11.1 o posterior.
  • TypeScript: Versión5.8 o posterior.
  • Copia de seguridad del proyecto: Confirma todos los cambios actuales en Git.

3. Cómo Actualizar: Comando CLI y Comparación

Comando de Actualización

Primero, asegúrate de que estás ejecutando Node.js v20.11.1 o posterior.

ng update @angular/cli @angular/core
Enter fullscreen modeExit fullscreen mode

Si usas Angular Material, inclúyelo en el comando de actualización:

ng update @angular/cli @angular/core @angular/material
Enter fullscreen modeExit fullscreen mode

Intervención Manual Requerida

Esto no era necesario en versiones anteriores, pero ahora esobligatorio if you want to keep using Karma. El comando reinstala el compilador antiguo con soporte para Karma.

npminstall @angular-devkit/build-angular--save-dev
Enter fullscreen modeExit fullscreen mode

Comparación con Actualizaciones Anteriores

  • En v19:ng update simplemente funcionaba.
  • En v20: Debes reinstalar manualmente el compilador antiguo para Karma.

4. Flujo de Control(Control Flow): Más que Syntaxis Decorativo

La nueva sintaxis@for reemplaza a*ngFor y es una mejora importante.

Sintaxis Antigua:

<div*ngFor="let item of items; trackBy: trackItemById">  {{ item.name }}</div>
Enter fullscreen modeExit fullscreen mode

Sintaxis Nueva:

@for (item of items; track item.id) {<div>{{ item.name }}</div>} @empty {<div>No hay elementos para mostrar.</div>}
Enter fullscreen modeExit fullscreen mode

Mejoras clave:

  • track ahora es obligatorio, lo que fomenta las mejores prácticas de rendimiento.
  • @empty mejora la experiencia del desarrollador (DX) al eliminar la necesidad de un bloque@if separado para manejar listas vacías.

Migración Automatizada y Rendimiento

Usa la CLI para refactorizar automáticamente las plantillas a la nueva sintaxis de flujo de control, que ofrece mejoras de rendimiento y un código más mantenible.

ng generate @angular/core:control-flow
Enter fullscreen modeExit fullscreen mode

Mejores Prácticas Generales y Migraciones Adicionales

Considera migrar a otras características modernas de Angular junto con la actualización del flujo de control para una aplicación completamente optimizada. Esto puede incluir componentes standalone, signals como inputs y carga diferida (lazy loading) para rutas.

ng generate @angular/core:standaloneng generate @angular/core:injectng generate @angular/core:route-lazy-loadingng generate @angular/core:signal-input-migrationng generate @angular/core:signal-queries-migrationng generate @angular/core:output-migration
Enter fullscreen modeExit fullscreen mode

5. Standalone por Defecto: Un Cambio Arquitectónico Fundamental

Al listar explícitamente las dependencias usando el arrayimports a nivel de componente, cada componente se vuelve autocontenido. Esto clarifica tu arquitectura y mejora significativamente el tree-shaking, resultando en paquetes de aplicación más pequeños.


6. Adiós Zone.js (Zoneless): Escapando de la "Magia" de la Detección de Cambios

En un mundo sin zone.js, la interfaz de usuario solo se actualiza cuando se lo indicas explícitamente. Los Signals son la herramienta principal para esto. Cuando llamas amySignal.set(), le estás diciendo directamente a Angular que actualice solo las partes del DOM que usan ese signal. Es un enfoque quirúrgico, predecible y de alto rendimiento.


7. Nueva Convención de Nombres: Por Qué Parece Complicado

Angular 20 introduce una nueva convención de nombres oficial que elimina los sufijos de tipo tradicionales.

Nomenclatura Antigua:

user-profile.component.tsauth.service.tshighlight.directive.ts
Enter fullscreen modeExit fullscreen mode

Nomenclatura Nueva:

user-profile.tsauth-store.tshighlight.ts
Enter fullscreen modeExit fullscreen mode

El nuevo enfoque está en laintención del archivo en lugar de su tipo:

  • user-api.ts → Maneja peticiones HTTP
  • auth-store.ts → Gestiona el estado reactivo
  • movie-card.ts,movie-details.ts → Componentes de UI

Reglas Clave de Nomenclatura:

  • Usa guiones para nombres de archivo de varias palabras (ej.user-profile.ts).
  • Haz que el nombre de la clase coincida con el nombre del archivo.
  • Mantén el sufijo.spec.ts para los archivos de prueba.
  • Evita nombres genéricos comoutils.ts.
  • Ubica los archivos relacionados en la misma carpeta (co-locate) dentro de una estructura de carpetas basada en funcionalidades.

Ejemplo de Estructura de Carpetas Basada en Funcionalidades:

src/├── core/│   └── auth/│       ├── auth-store.ts│       ├── login.ts│       └── register.ts└── features/    └── users/        ├── user-profile.ts        ├── user-api.ts        └── user-settings.ts
Enter fullscreen modeExit fullscreen mode

Beneficios:

  • Diffs en Git más limpias al refactorizar.
  • Promueve un código orientado a la intención.
  • Facilita la incorporación de nuevos desarrolladores.

8. Detalle Importante:browserslist y Soporte de Navegadores

Angular 20 ya no soporta oficialmente Opera. Si tienes Opera en tu archivo.browserslistrc, puede que necesites eliminarlo. Otros navegadores no convencionales también pueden perder soporte, lo que podría provocar advertencias o problemas de compilación.

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

web-dev

More fromAngular Firebase

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp