<link rel="stylesheet" href="/assets/fonts/jetbrains-mono/jetbrains-mono.css" />
All posts

Migrimi këndor nga v10 në v21: Udhëzues i plotë version për version

Migrimi i një aplikacioni nga Angular 10 në Angular 21 do të thotë të kalosh njëmbëdhjetë lëshime kryesore, secila me ndryshimet e veta të thyera. Të bësh atë me një hap nuk është kurrë një opsion realist: ekipi Vetë Angular rekomandon përmirësimesekuenciale, një e madhe në të njëjtën kohë, duke përdorurpërditësiminë çdo hap. Ky udhëzues mbulon të gjithë udhëtimin: çfarë ndryshon në secilin versioni, komandat e sakta për të ekzekutuar, problemet më të zakonshme që hasen në migrimet reale, ndikimi mbi performancën dhe paketat, dhe një plan operacional 30/60/90 ditor për të menaxhuar rrezikun në një projekt ndërmarrje.

Shënim i rëndësishëm: disa detaje versioni (veçanërisht për Angular 19, 20 dhe 21, më i fundit në momentin e shkrimit) duhet të kontrollohet gjithmonë me dokumentacionin zyrtar përpara se të planifikoni një përmirësim në prodhim, menpm shikoni versionet @angular/coreDheng versionnë projektin real.

Matrica e përputhshmërisë

KëndoreTypeScriptRxJSNyjaCLI këndoreMateriali këndor
103.96.5 / 6.610.13 / 12.111010
114.06.5.310.13 / 12.111111
124.26.5.3 / 712.14 / 141212
134.46.5.3 / 712.20 / 141313
144.6 / 4.76.5.3 / 714:15 / 16:001414
154.8 / 4.96.5.3 / 714:20 / 16:001515
164.9 / 5.16.5.3 / 716/181616
175.26.5.3 / 718.13 / 201717
185.4 / 5.56.5.3 / 718.19 / 20 / 221818
195.5 / 5.66.5.3 / 718.19 / 20 / 221919
205.6+ (kontrollo)720/22 (kontrollo)2020
21për të kontrolluar7për të kontrolluar2121

Për Angular 20 dhe 21, kontrolloni gjithmonë kërkesat e sakta përpara se të planifikoni:npmview @angular/core@21 peerDependencieskthen versionet minimale të kërkuara për momentin i instalimit, më i besueshëm se çdo tabelë statike.

ng komandat e përditësimit: Modeli Sekuencial

# Pattern generale per ogni step (mai saltare una major)
ng update @angular/core@X @angular/cli@X --force
npm install
ng build
npm test

# Esempio concreto: da 10 a 11
ng update @angular/core@11 @angular/cli@11

Flamuri-- forcëinjoron kontrollet e përputhshmërisë së varësisë nga kolegët kur a Biblioteka e palëve të treta nuk ka lëshuar ende mbështetje për versionin kryesor të ri - përdorni vetëm pasi ta keni kontrolluar manualisht nëse biblioteka funksionon gjithsesi, kurrë si parazgjedhje automatike.-- vetëm migrimiekzekuton vetëm skemat e migrimit pa prekur versionet paketat (të dobishme për ri- ekzekutimin e një migrimi specifik pas një rregullimi manual), ndërsa--nga/--tëju lejon të synoni një gamë të saktë versionesh kurpërditësiminuk zbulon automatikisht versionin e duhur fillestar.

Angular 11 → 12: Nga View Engine te Ivy Everywhere

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • Angular 11 (nëntor 2020): TypeScript 4.0, gjurmë më të lexueshme të stivës, zëvendësim opsional i modulit të nxehtë.
  • Angular 12 (maj 2021): Ivy bëhet përpiluesi/koha e parazgjedhur për botimin e bibliotekave (Formati i paketës këndore i përditësuar), modaliteti i rreptë i aktivizuar si parazgjedhje në projektet e reja, zhvlerësimi zyrtar i View Engine.
  • API-të e vjetruara:hyrje Komponentëtnuk është më e nevojshme me Ivy,relativeLinkResolutionnë ruterin e vjetëruar.
ng update @angular/core@12 @angular/cli@12
// tsconfig.json — strict mode raccomandato da Angular 12 in poi
{
  "compilerOptions": { "strict": true },
  "angularCompilerOptions": { "strictTemplates": true }
}

Angular 13: Mirupafshim për View Engine dhe IE11

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • View Engine u hoq plotësisht: vetëm Ivy nga ky version e tutje,ngccnuk është më e nevojshme për bibliotekat e botuara me Formatin e ri të Paketës Angular.
  • Mbështetja e Internet Explorer 11 u hoq – nëse audienca juaj ende përfshin IE11, kjo është një gjë kryesore për t'u vlerësuar me kujdes.
  • API e re për komponentët dinamikë (ViewContainerRef.createComponentpaComponentFactoryResolver).
// Prima (Angular 12 e precedenti)
constructor(private resolver: ComponentFactoryResolver) {}
createDynamic() {
  const factory = this.resolver.resolveComponentFactory(MyComponent);
  this.container.createComponent(factory);
}

// Dopo (Angular 13+) — nessun ComponentFactoryResolver necessario
createDynamic() {
  this.container.createComponent(MyComponent);
}

Angular 14: Komponentët e pavarur në pamjen paraprake të zhvilluesit

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • Komponentët/direktivat/gypat e pavarur të prezantuar (pamja paraprake e zhvilluesit, nuk rekomandohet ende për prodhim).
  • Format reaktive të shtypura:FormControldhe të ngjashme bëhen të përgjithshme, duke rezultuar në gabime të tipit në kodin ekzistues që supozoindonjë.
  • Diagnostifikimi i zgjeruar i përpiluesit raporton modele të rrezikshme në shabllone tashmë në fazën e ndërtimit.
ng update @angular/core@14 @angular/cli@14
// Typed forms — il compilatore ora rileva errori prima invisibili
const form = new FormGroup({ email: new FormControl('', { nonNullable: true }) });
// form.value.email è ora tipizzato string, non any

Angular 15: Standalone Stabili dhe NgOptimizedImage

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • API i pavarur bëhet i qëndrueshëm dhe rekomandohet për projekte të reja.
  • DirektivaNgOptimizedImagee qëndrueshme: ngarkim automatik dembel dhe madhësia e imazhit me ndikim të drejtpërdrejtë në LCP.
  • Materiali këndor kalon në arkitekturën e re bazuar në MDC (Material Design Components), me ndryshime të vogla vizuale të mundshme në komponentët ekzistues.
// Componente standalone — nessun NgModule richiesto
@Component({ selector: 'app-widget', standalone: true, imports: [CommonModule], template: `...` })
export class WidgetComponent {}
<img ngSrc="hero.jpg" width="800" height="400" priority />

Angular 16: Sinjalet në pamjen paraprake të zhvilluesit

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • Sinjalet e prezantuara në pamjen paraprake të zhvilluesit: reaktivitet granular alternativ/plotësues ndaj Zone.js.
  • Ndërtuesi esbuild në pamjen paraprake të zhvilluesit përng ndërtuar: Koha e ndërtimit dukshëm më e shpejtë.
  • Inputet e nevojshme (@Input ({ e nevojshme: e vërtetë })) dhe etiketat vetë-mbyllëse në shabllone ().
  • Mbështetje eksperimentale për Jest si një testues alternativ për Karma.
ng update @angular/core@16 @angular/cli@16
# Opt-in al builder esbuild (developer preview in questa versione)
// Signal — reattività granulare senza dipendere dal digest di Zone.js
count = signal(0);
doubled = computed(() => this.count() * 2);

Angular 17: Rrjedha e re e kontrollit dhe Vite/esbuild e parazgjedhur

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • Sintaksë e re e rrjedhës së kontrollit në shabllone (@nëse,@për,@kaloni) i qëndrueshëm, zëvendëson*ngNëse/*ngPërme performancë më të mirë të interpretimit.
  • Ndërtuesi i bazuar në esbuild/Vite bëhet i paracaktuar për projektet e reja (zhvilluesi i serverit shumë më i shpejtë).
  • @deferpër ngarkimin dembel deklarativ të blloqeve të shablloneve (pamje të shtyra).
<!-- Prima: *ngFor/*ngIf -->
<div *ngIf="user">{{ user.name }}</div>
<li *ngFor="let item of items; trackBy: trackById">{{ item.name }}</li>

<!-- Dopo: nuovo control flow, track obbligatorio in @for -->
@if (user) { <div>{{ user.name }}</div> }
@for (item of items; track item.id) { <li>{{ item.name }}</li> }
<!-- @defer — carica il blocco solo quando entra in viewport -->
@defer (on viewport) {
  <heavy-chart />
} @placeholder {
  <div class="skeleton"></div>
}

Angular 18: Eksperimentale pa zonë dhe material 3

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • Zbulimi eksperimental i ndryshimeve pa zona: Aftësia për të hequr Zone.js nga paketa për aplikacionet e bazuara në sinjal.
  • Materiali këndor 3 (Material Design 3) i qëndrueshëm, me dizajne të reja të shenjave të temave.
  • Riprodhimi i ngjarjeve për aplikacionet me SSR/hidratim: Ngjarjet e përdoruesit gjatë hidratimit nuk humbasin më.
// main.ts — opt-in sperimentale a zoneless (rimuove la dipendenza da Zone.js)
bootstrapApplication(AppComponent, {
  providers: [provideExperimentalZonelessChangeDetection()],
});

Angular 19: Hidratimi i paracaktuar i pavarur dhe në rritje

Vështrim i përgjithshëm dhe ndryshimi i thyer

  • Projektet e reja të krijuara ngae reato janë të pavarura si parazgjedhje:NgModulinuk është më skela e paracaktuar.
  • Hidratim në rritje: hidraton në mënyrë selektive pjesë të faqes në vend të të gjithë aplikacionit me shumicë, me përfitime të drejtpërdrejta në Time to Interactive.
  • Primitivët e rinj të bazuar në sinjal (i lidhur sinjal,burimet) për marrjen e të dhënave të gjendjes së prejardhur dhe reaktive.
ng update @angular/core@19 @angular/cli@19
// resource() — data fetching reattivo basato su Signal (verificare API esatta nella versione installata)
userResource = resource({
  request: () => this.userId(),
  loader: ({ request }) => fetchUser(request),
});

Angular 20 dhe 21: Kontrolloni gjithmonë Dokumentacionin Zyrtar

Për këto dy lëshime, më të fundit në kohën e shkrimit të këtij udhëzuesi, detajet e sakta të thyerja e kërkesave të ndryshimit dhe varësisë duhet të konfirmohet gjithmonë me komandat zyrtare më parë Planifikoni përmirësimin — drejtimi i përgjithshëm është konsolidimi i sinjaleve dhe pa zona drejt stabilitet i plotë, reduktim i mëtejshëm i paketës së paracaktuar dhe evoluim i vazhdueshëm i ndërtuesit esbuild/Vite, por datat e sakta dhe detajet specifike të API-së duhet të verifikohen rast pas rasti.

# Verifica sempre versione corrente, changelog e requisiti prima di procedere
npm view @angular/core versions --json | tail -20
ng version
npx ng update @angular/core@21 @angular/cli@21 --dry-run

RxJS: Nga rxjs-compat te Removal

Në projektet e filluara nga Angular 10, është e zakonshme të gjesh më shumërxjs-compatinstaluar për Sintaksa mbështetëse me operatorë të lidhur para-pipeable. Duhet të hiqet sa më shpejt që të jetë e mundur: përveç fryrja e paketës fsheh zhvlerësime që përndryshe përpiluesi do t'i raportonte menjëherë.

// Prima — operatori concatenati (richiede rxjs-compat)
source.map(x => x * 2).filter(x => x > 10).subscribe();

// Dopo — pipeable operators, nessuna dipendenza da rxjs-compat
source.pipe(map(x => x * 2), filter(x => x > 10)).subscribe();
npm uninstall rxjs-compat

Testimi: nga karma / raportor në shaka / selvi

Raportori është zhvlerësuar nga vetë ekipi Angular që nga viti 2022 dhe duhet të zëvendësohet pavarësisht Versioni i synuar këndor. Karma mbetet funksionale më gjatë, por Jest (mbështetur eksperimentalisht Angular 16 e tutje) ofron kohë shumë më të shpejta ekzekutimi në CI.

# Migrazione E2E: rimuovi Protractor, installa Cypress
ng g @angular/cli:e2e-e2e-schematic-removal 2>/dev/null || echo "rimuovi manualmente e2e/ e protractor.conf.js"
npm install --save-dev cypress
npx cypress open
// Test aggiornato — Jest invece di Jasmine/Karma
describe('UserCardComponent', () => {
  it('mostra il nome utente', () => {
    const fixture = TestBed.createComponent(UserCardComponent);
    fixture.componentRef.setInput('user', { name: 'Mario' });
    fixture.detectChanges();
    expect(fixture.nativeElement.textContent).toContain('Mario');
  });
});

Skript i Automatizimit për Përmirësimet Sekuenciale

#!/bin/bash
# upgrade-sequenziale.sh — esegue ng update versione per versione con report
set -e
VERSIONS=(11 12 13 14 15 16 17 18 19)
for v in "${VERSIONS[@]}"; do
  echo "=== Upgrade a Angular $v ==="
  ng update @angular/core@$v @angular/cli@$v --force
  npm install
  npm run build > "report-build-v$v.log" 2>&1 || { echo "❌ Build fallita su v$v"; exit 1; }
  npm test -- --watch=false > "report-test-v$v.log" 2>&1 || echo "⚠️  Test falliti su v$v, controllare report-test-v$v.log"
  git add -A && git commit -m "chore: upgrade Angular a v$v"
done
echo "✅ Upgrade sequenziale completato fino a v${VERSIONS[-1]}"

Monorepo: Nx, Lerna dhe pnpm Workspace

Në një monorepo me biblioteka të brendshme të përbashkëta, rendi i përditësimit ka rëndësi: përditësoni së pari bibliotekat e përbashkëta (duke verifikuar që secilavarësitë nga bashkëmoshatarëtdeklaroni një gamë të pajtueshme me kryesoren e re), rikompilojini ato, më pas përditësoni aplikacionet e konsumatorit. Me Nx,nx migrojnë e funditorkestroje automatikisht këtë porosi për paketat e menaxhuara nga hapësira e punës.

# Nx — migrazione orchestrata dell'intero workspace
npx nx migrate latest
npx nx migrate --run-migrations

CI/CD: Përditëso tubacionet

# GitHub Actions — matrice Node/Angular coerente con la versione target
jobs:
  build:
    strategy:
      matrix:
        node-version: [20.x]
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'
      - run: npm ci
      - run: npm run build -- --configuration production
      - run: npm test -- --watch=false --browsers=ChromeHeadless

Përditësoni gjithmonë versionin Node në tubacionin tuajPërparapër të ekzekutuarpërditësiminë nivel lokal: një mospërputhje midis nyjes lokale dhe nyjes CI është një shkak i shpeshtë i "punon në kompjuterin tim" gjatë përmirësimeve.

Ndikimi në performancën dhe paketën

  • Ivy vs View Engine: tufa më të vogla mesatarisht dhe lëkundje më efektive e pemëve tashmë nga kalimi në Ivy (Angular 9-13).
  • Duke hequr ngcc: Ndërtimet më të shpejta pas Angular 13, kur të gjitha bibliotekat publikohen në formatin origjinal të paketës Angular Ivy.
  • esbuild/Vite: Zvogëlohet në mënyrë dramatike koha e ndërtimit dhe serverit të zhvillimit në krahasim me ndërtuesin e vjetër të Webpack, duke filluar me Angular 16-17.
  • Komponentët e pavarur: eliminojnë pllakën e kaldajës sëNgModulidhe përmirëson dridhjen e pemëve me kokërr të imët për komponent.
  • Sinjale dhe pa zona: Heqja e mundshme e Zone.js nga paketa përfundimtare, duke rezultuar në zvogëlim të madhësisë dhe unaza të panevojshme të zbulimit të ndryshimeve.
  • Ngarkimi diferencial: U hoq në versionet më të reja sepse mbështetja moderne e shfletuesit e ka bërë të vjetëruar nevojën për paketa të veçanta ES5/ES2015+.

Çështjet e njohura dhe zgjidhjet e zakonshme

  • Shkruani gabime pasi aktivizoni modalitetin e rreptë: aktivizojeni gradualisht skedar pas skedari me// @ts-strict-ignorei përkohshëm në vend që të bllokojë të gjithë përmirësimin.
  • Bibliotekat e palëve të treta nuk janë përditësuar: kontrollo me të parënnpm e vjetëruardhe merrni parasysh pirunët ose arna të përkohshme nëpërmjetpatch-paketënëse biblioteka është e braktisur.
  • Konflikti i varësisë nga bashkëmoshatarët me-- forcë: Dokumentoni gjithmonë pse ishte e nevojshme, për të mos humbur gjurmët e borxhit teknik të fshehur.
  • @përpaudhë: kërkon rrjedha e re e kontrollitudhëkërkohet, një gabim i zakonshëm ndërtimi kur migroni nga*ngPër.

Lista kontrolluese e para-përmirësimit

  • Degë e dedikuar për përmirësimin, asnjëherë direkt në rrjet.
  • Mbulimi ekzistues i testit matet si bazë para fillimit.
  • Pastroni gjurmuesin e problemit: asnjë gabim i njohur tashmë i hapur që mund të ngatërrohet me një regresion përmirësimi.
  • Git backup/etiketën e versionit aktual të punës, gati për rikthim të menjëhershëm.

Lista kontrolluese e rikthimit

  • Versioni parapërmirësues Etiketa Git krijohet gjithmonë përpara fillimit (Përmirësimi paraprak i etiketës git-v10).
  • paketë-kyç.jsonkryer në çdo hap, në mënyrë që të rivendoset grafiku i saktë i varësisë së mëparshme.
  • Tubacioni CI/CD i aftë për të vendosur versionin e mëparshëm të etiketuar pa ndryshime manuale.
  • Nëse projekti juaj ka migrime të dhënash të lidhura me një veçori në versionin e ri, verifikoni që ato janë të kthyeshme përpara se të vendosen.

Plani Operativ 30/60/90 Ditë

Ditët 1-30: Këndore 10 → 14

  • Përmirësimi vijues 10→11→12→13→14 në degën e dedikuar —KPI: ndërtim i gjelbër në çdo hap, 0 regresione funksionale të njohura.
  • Heqja erxjs-compatdhe ViewEngine i mbetur -KPI: 0 paralajmërime zhvlerësimi në ndërtim.

Ditët 31-60: Këndore 15 → 18

  • Miratimi i komponentëve të pavarur në modulet e reja, migrimi E2E në Cypress -KPI: 0 teste të mbetura të raportuesit.
  • Përmirësimi vijues 15→16→17→18, miratimi i rrjedhës së re të kontrollit në shabllonet më të vizituara —KPI: Koha e reduktuar e ndërtimit e matur para/pas.

Ditët 61-90: Këndore 19 → 21

  • Përmirësimi përfundimtar deri në versionin e synuar, i verifikuar kundrejt dokumentacionit zyrtar në çdo hap -KPI: 100% e ndërtimit dhe kalueshmërisë testuese në versionin përfundimtar.
  • Vlerësimi pa zonë/sinjale në komponentët më të lartë të trafikut —KPI: madhësia përfundimtare e paketës në krahasim me bazën e para-përmirësimit.

Studimi i rastit 1: Aplikacionet e ndërmarrjeve me Monorepo Nx

Një aplikacion i ndërmarrjes në monorepo Nx (8 biblioteka të brendshme të përbashkëta, Angular 10) ka përfunduar përmirësimi në Angular 18 në 14 javë me 1.5 zhvillues të dedikuar (~ 420 orë persona totalet). Problemet kryesore: 3 biblioteka të palëve të treta pa mbështetje amtare Ivy, të rregulluara mengcci detyruar deri në Angular 12 dhe zëvendësimi i mëvonshëm me alternativa të ruajtura. Rezultati: paketa fillestare e reduktuar me 28% (komponentët e pavarur + esbuild), koha e ndërtimit CI reduktohet nga 9 në 3 minuta.

Rasti Studimi 2: E-commerce me Material Angular

Një sajt i tregtisë elektronike me varësi të madhe nga Angular Material (Angular 11) ka përfunduar përmirësimin në Angular 17 në 8 javë me 2 zhvillues me kohë të pjesshme (~ 180 orë persona). Kalimi në materialin 3 (bazuar në MDC) kërkonte një auditim të plotë vizual të komponentëve të stiluar me porosi, problemi më i madh shtrenjtë e gjithë migrimit. Rezultati: 12 gabime latente të paraqitjes të rregulluara gjatë auditimit, Time to Interactive u përmirësua me 22% falë rrjedhës së re të kontrollit dhe@defernë miniaplikacionet jo-kritike të sipërme.

FAQ

A mund të anashkalohet një version kryesor gjatë azhurnimit?

Nuk rekomandohet:përditësimiaplikoni skematika specifike të migrimit për çdo kryesor, duke anashkaluar një rrezikon transformimin e kodit jo të plotë.

Sa kohë zgjat mesatarisht një përmirësim nga Angular 10 në 21?

Kjo varet shumë nga madhësia e projektit dhe bibliotekat e palëve të treta të përfshira; Projektet reale të ndërmarrjeve zakonisht kërkojnë 2 deri në 4 muaj me përpjekje të pjesshme të dedikuara.

A duhet t'i rishkruaj të gjithë komponentët në mënyrë të pavarur?

Jo, i pavarur dhe NgModule mund të bashkëjetojnë për një kohë të gjatë; migrimi mund të jetë i mirëpritur dhe oportunist në modulet e prekura për arsye të tjera.

Çfarë duhet të bëni nëse një bibliotekë e palës së tretë nuk e mbështet versionin e ri kryesor?

Kontrolloni alternativat e ruajtura, merrni parasysh një pirun të përkohshëm me arna minimale ose izoloni bibliotekën pas një përshtatësi për ta zëvendësuar më lehtë në të ardhmen.

A është i sigurt përditësimi --force?

Vetëm pasi të verifikohet manualisht se bibliotekat e prekura ende funksionojnë; nuk është një flamur për t'u përdorur si parazgjedhje automatike.

A duhet hequr menjëherë Zone.js?

Jo, zoneless është ende në zhvillim në versionet më të reja; Merrni parasysh heqjen vetëm pas një auditimi të plotë të komponentëve që varen në mënyrë implicite nga tretja automatike.

Si ndodhin dobësitë e sigurisë gjatë përmirësimit?

Meauditimi npmnë çdo hap dhe, për projektet e ndërmarrjeve, një skaner i dedikuar si Snyk i integruar në CI.

A është e nevojshme të migroni nga Karma në Jest?

Jo, Karma qëndron më gjatë e mbështetur; Jest është një opsion për përshpejtimin e CI, jo një kërkesë e detyrueshme e diplomave të reja.

Çfarë ndodh me testet ekzistuese të raportorit?

Ato duhet të zëvendësohen me Cypress ose Dramaturg, pavarësisht nga versioni i synuar, sepse Protractor është zhvlerësuar nga vetë ekipi Angular.

Si e vlerësoni përpjekjen e një përmirësimi shumë të madh?

Shtimi i përpjekjeve për çdo të madh (ndërtim, rregullim i ndryshimit të thyer, test) plus një buffer për bibliotekat e palëve të treta jo të përditësuara, zakonisht rreziku më i madh.

A është e nevojshme të përditësohet Node me çdo Angular major?

Jo gjithmonë për çdo diplomë të vetme, por duhet të kontrollohet në matricën e përputhshmërisë: disa diploma rritin kërkesën minimale të Node.

A është më mirë të përmirësohet në një PR të madhe apo në shumë të vogla?

Shumë PR të vogla, një për versionin kryesor, për të izoluar rrezikun dhe për të lehtësuar rikthimin e një hapi të vetëm në rast regresi.

Gabimet e zakonshme që duhen shmangur

  • Kalo versionin kryesor për të "bëje së pari": Skemat e migrimit janë menduar të zbatohen në mënyrë sekuenciale, duke anashkaluar një shkakton transformime jo të plota.
  • Mos lexoni ditarin e ndryshimeve të çdo drejtorie: disa ndryshime të thyera nuk kanë një skematikë automatike dhe kërkojnë ndërhyrje manuale.
  • Injoroni paralajmërimet e zhvlerësimit: ato bëhen gabime bllokuese në pjesën tjetër kryesore, më mirë t'i zgjidhni kur ato janë ende vetëm paralajmërime.
  • -- forcëpërdoret pa verifikim: fsheh papajtueshmëri reale që dalin më vonë në prodhim.
  • Mos e përditësoni Node në CI përpara kodit lokal: Shkakton ndërtime që funksionojnë vetëm në një makinë.
  • Shtyjeni heqjen e rxjs-compat: Fsheh zhvlerësimet e RxJS që përpiluesi do të raportonte ndryshe.
  • Nuk ka etiketa Git përpara fillimit të azhurnimit: E bën rikthimin shumë më të ngadaltë dhe më të rrezikshëm në rast regresi.
  • Testet E2E në raportor mbahen "për momentin": Raportori është i amortizuar, çdo muaj vonesë migrimi rrit borxhin teknik.
  • Aktivizo modalitetin e rreptë TypeScript në të gjithë projektin tënd me një goditje: Gjeneron qindra gabime të njëkohshme, mundësisht modul për modul.
  • Mos e matni madhësinë e paketës para/pas: Pa një bazë, nuk është e mundur të verifikohet nëse përmirësimi solli vërtet përfitimet e pritura të performancës.
  • Përditësoni bibliotekat e brendshme monorepo pas aplikacioneve të konsumatorëve: për shkak të papajtueshmërive të përkohshme, rendi i saktë është gjithmonë së pari bibliotekat, së dyti aplikacionet.
  • Asnjë plan rikthimi për tubacionet CI/CD: Një përmirësim që thyen ndërtimin e prodhimit pa një rrugë të shpejtë rikthimi e kthen një defekt në një incident.

Si të kontrolloni

  • Kontrolloni versionin aktual dhe të disponueshëm:ng versionDhenpm shikoni versionet @angular/core.
  • Kryeni një ekzekutim të thatë përpara çdo përditësimi real:përditësimi @angular/core@X --dry-run.
  • Kontrolloni dobësitë pas çdo hapi:auditimi npm.
  • Kontrolloni ndërtimin e prodhimit:ng build --prodhimi i konfigurimit.
  • Ekzekutoni të gjithë grupin e testimit:npm test -- --watch=falsedhe suita E2E Cypress.
  • Matni madhësinë e paketës para/pas menpx webpack-bundle-analyzerose daljen e ndërtimit Angular CLI.

konkluzioni

Një përmirësim nga Angular 10 në 21 nuk është një ngjarje e vetme, por një program shumë-mujor me njëmbëdhjetë faza sekuenciale, secila me rreziqet dhe përfitimet e veta. Modeli që funksionon në praktikë është gjithmonë i njëjtë: një nga një diplomë,përditësimie ndjekur nga ndërtimet dhe testet e gjelbra më parë vazhdoni, etiketat Git në çdo hap për rikthim të shpejtë dhe verifikim sistematik të dokumentacioni zyrtar për versionet më të reja ku detajet nuk janë konsoliduar ende në kujtesa kolektive e ekipit.

Ju dëshironi një plan të detajuar migrimi për projektin tuaj specifik ose një vlerësim e përpjekjes së kërkuar?Kërkoni një auditim teknik: në vetëm disa orë analizë të bazës së kodit është Ju mund të vlerësoni kohët, rreziqet kryesore dhe bibliotekat e palëve të treta për të monitoruar gjatë përmirësimit.

💬 Shënime nga lexuesit

0 shënime

Shkruaj një shënim

Ndaj mendimin tënd, një sugjerim ose një kompliment

Shënimet e fundit

Ende asnjë shënim. Bëhu i pari që komenton!