Ravn Webveveriet logo

Oppgradering av en webapplikasjon fra Angular 10 til Angular 19

Erfaringer fra en omfattende prosess, og tips til strategier for at det skal gå så smidig og effektivt som mulig.

Oppgradering av en eldre Angular-applikasjon er sjelden en enkel oppgave. I dette tilfellet var den største utfordringen migreringen av komponenter fra Angular MDC Web til Angular Material, spesielt med de store endringene som kom i versjon 15. Dette blogginnlegget tar deg gjennom prosessen.

Logoen til Angular 19 på en bakgrunn av former i lillanyanser

Litt om prosjektet

Prosjektet var et relativt standard Angular-prosjekt fra 2019, bygget med best practices fra den tiden. Front-end arkitekturen inkluderte blant annet:

  • Angular MDC Web: Brukt for Material Design-komponenter, men avviklet til fordel for Angular Material.
  • Routing-moduler: Strukturen var modulbasert med routingmoduler for hver hovedseksjon.
  • Content- og Resolver-servicer: Brukt for å håndtere datalasting på en effektiv måte.

Det er alltid lurt å oppdatere jevnlig, men av ulike grunner befant vi oss for dette prosjektet langt bak den nyeste versjonen av Angular og bestemte oss i slutten av 2024 for at tiden var inne for å gjennomføre oppdateringen. Den største jobben var å erstatte nedlagte Angular MDC Web med Angular Material. Dette innebar omskriving av rundt 1200 forekomster i kodebasen.

Før oppdateringen

Før vi startet selve oppdateringen, gjorde vi forarbeid for å få oversikt og finne ut av hvordan prosessen kunne forenkles:

  1. Identifisere alle bruksområder av Angular MDC Web
  2. Skrive et script for å erstatte enkle tilfeller automatisk
  3. Gjøre manuelle tilpasninger for komplekse tilfeller
  4. Oppdatere dependencies gradvis

Selv med et script var det mange tilfeller hvor manuell omskriving var nødvendig, spesielt der MDC-komponentene hadde forskjellig API sammenlignet med Angular Material.

Underveis: Versjon 15 og Angular Material

Versjon 15 av Angular innebar en stor overgang i Angular Material, hvor komponentene ble migrert til Material Design Components for Web (MDC Web) basert styling. Dette betydde at applikasjonen måtte migreres til de nye komponentene for å unngå å ende opp med legacy-komponenter.

For å sikre en smidig overgang:

  • Brukte Angular Material migreringsverktøyet der det var mulig.
  • Refaktorerte kode der gamle komponenter ikke hadde en direkte erstatning.
  • Testet hver enkelt modul etter oppdatering for å identifisere visningsfeil.

Etter oppdateringen

Etter at oppdateringen var fullført, gikk applikasjonen gjennom grundig testing for å fikse feil. De fleste feilene var visningsrelaterte, som margin, padding og stilendringer som påvirket layouten. Men hvilke feil andre vil få her avhenger selvfølgelig av hvilken funksjonalitet som finnes i deres applikasjon.

På dette tidspunktet var det også mulig å velge hvilken versjon av material design man ønsket å bruke i prosjektet. Angular Material støtter både Material Design 2 og Material Design 3. I skrivende stund mener jeg at Material Design 2 har best støtte for hva hva dette prosjektet hadde behov for, mens Material Design 3 sikkert blir bedre med tiden. Det vil være mulig å bytte fra versjon 2 til 3 på et senere tidspunkt. For øvrig finner man mer informasjon om dette landskapet på hjemmesidene til Angular Material eller i dette blogginnlegget: https://blog.angular.dev/the-future-of-material-support-in-angular-7fa0662ecc4b

Konklusjon

Å oppgradere en Angular-applikasjon fra versjon 10 til 19 var en stor, men overkommelig oppgave. Nøkkelinnsikter fra prosessen:

  • Følg Angular sin offisielle guide og test jevnlig.
  • Planlegg migreringen av store endringer som Angular Material i forkant.
  • Bruk skript for å automatisere repetitive oppgaver.
  • Test hver oppdatering for å unngå at feil hoper seg opp.

Denne erfaringen viser at store oppdateringer kan være krevende, men også en god anledning til å modernisere kodebasen og ta i bruk nye verktøy og best practices.