Die Migration einer Anwendung von Angular 10 auf Angular 21 bedeutet, elf Hauptversionen zu durchlaufen.
jedes mit seinen eigenen bahnbrechenden Änderungen. Es ist nie eine realistische Option, es auf einen Schlag zu schaffen: das Team
Angular selbst empfiehlt aufeinanderfolgende Upgrades, jeweils ein Major
ng-Update bei jedem Durchgang. Dieser Leitfaden deckt die gesamte Reise ab: was sich in jedem ändert
Version, die genauen auszuführenden Befehle, die häufigsten Probleme, die bei echten Migrationen auftreten, die Auswirkungen
zu Leistung und Paketen sowie einen 30/60/90-Tage-Betriebsplan zum Risikomanagement eines Projekts
Unternehmen.
Wichtiger Hinweis: Einige Versionsdetails (insbesondere für Angular 19, 20 und 21,
(die zum Zeitpunkt des Verfassens aktuellste Version) müssen immer anhand der offiziellen Dokumentation überprüft werden
Bevor Sie ein Upgrade in der Produktion planen, mit npm @angular/core-Versionen anzeigen und
ng-Version im realen Projekt.
Kompatibilitätsmatrix
| Angular | TypeScript | RxJS | Node | Angular CLI | Angular Material |
|---|---|---|---|---|---|
| 10 | 3,9 | 6,5 / 6,6 | 10,13 / 12.11 | 10 | 10 |
| 11 | 4,0 | 6,5,3 | 10,13 / 12.11 | 11 | 11 |
| 12 | 4,2 | 6,5,3 / 7 | 12,14 / 14 | 12 | 12 |
| 13 | 4,4 | 6,5,3 / 7 | 12,20 / 14 | 13 | 13 |
| 14 | 4,6 / 4,7 | 6,5,3 / 7 | 14,15 / 16 | 14 | 14 |
| 15 | 4,8 / 4,9 | 6,5,3 / 7 | 14,20 / 16 | 15 | 15 |
| 16 | 4,9 / 5,1 | 6,5,3 / 7 | 16 / 18 | 16 | 16 |
| 17 | 5,2 | 6,5,3 / 7 | 18,13 / 20 | 17 | 17 |
| 18 | 5,4 / 5,5 | 6,5,3 / 7 | 18,19 / 20 / 22 | 18 | 18 |
| 19 | 5,5 / 5,6 | 6,5,3 / 7 | 18,19 / 20 / 22 | 19 | 19 |
| 20 | 5,6+ (prüfen) | 7 | 20 / 22 (überprüfen) | 20 | 20 |
| 21 | zu prüfen | 7 | von überprüfen | 21 | 21 |
Überprüfen Sie für Angular 20 und 21 vor der Planung immer die genauen Anforderungen: npm-Ansicht
@angular/core@21 peerDependencies gibt die aktuell erforderlichen Mindestversionen zurück
Installationsaufwand, zuverlässiger als jeder statische Tisch.
ng-Update-Befehle: das sequentielle Muster
# 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
Das Flag --force umgeht Peer-Abhängigkeitskompatibilitätsprüfungen, wenn a
Die Bibliothek eines Drittanbieters hat die Unterstützung für das neue Hauptprogramm noch nicht freigegeben – nutzen Sie sie erst, wenn Sie dies getan haben
manuell überprüft, ob die Bibliothek trotzdem funktioniert, niemals als automatischer Standard.
--migrate-only führt nur die Migrationsschemata aus, ohne die Versionen der zu berühren
Pakete (nützlich zum erneuten Ausführen einer bestimmten Migration nach einer manuellen Korrektur), while
--von/--bis ermöglicht Ihnen die Ausrichtung auf einen bestimmten Versionsbereich
wenn ng update nicht automatisch die richtige Startversion erkennt.
Angular 11 → 12: Von View Engine zu Ivy Everywhere
Überblick und bahnbrechende Veränderungen
- Angular 11 (November 2020): TypeScript 4.0, besser lesbare Stack-Traces, optionaler Hot-Modul-Austausch.
- Angular 12 (Mai 2021): Ivy wird zum Standard-Compiler/Laufzeit auch für Veröffentlichungsbibliotheken (Angular Package Format aktualisiert), strikter Modus standardmäßig für neue Projekte aktiviert, formelle Ablehnung von View Engine.
- Veraltete APIs:
entryComponentswerden bei Ivy nicht mehr benötigt,relativeLinkResolutionim Router veraltet.
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: Auf Wiedersehen von View Engine und IE11
Überblick und bahnbrechende Veränderungen
- View Engine vollständig entfernt: ab dieser Version nur noch Ivy,
ngccnicht mehr erforderlich für Bibliotheken, die mit dem neuen Angular Package Format veröffentlicht wurden. - Unterstützung für Internet Explorer 11 entfernt – wenn Ihre Zielgruppe immer noch IE11 verwendet, sollten Sie dies sorgfältig prüfen.
- Neue API für dynamische Komponenten (
ViewContainerRef.createComponentohneComponentFactoryResolver).
// 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: Eigenständige Komponenten in der Entwicklervorschau
Überblick und bahnbrechende Veränderungen
- Eigenständige Komponenten/Anweisungen/Pipes eingeführt (Entwicklervorschau, noch nicht für die Produktion empfohlen).
- Typisierte reaktive Formulare:
FormControlund ähnliche werden generisch, was zu Typfehlern im vorhandenen Code führt, derirgendein. annimmt
- Erweiterte Compiler-Diagnose meldet riskante Muster in Vorlagen, die sich bereits in der Build-Phase befinden.
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 Stable und NgOptimizedImage
Überblick und bahnbrechende Veränderungen
- Standalone-API wird stabil und für neue Projekte empfohlen.
- Directive
NgOptimizedImagestabil: automatisches verzögertes Laden und Bildgrößenanpassung mit direkter Auswirkung auf LCP. - Angular Material wechselt zur neuen Architektur basierend auf MDC (Material Design Components), mit möglichen geringfügigen visuellen Unterschieden zu vorhandenen Komponenten.
// 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: Signale in der Entwicklervorschau
Überblick und bahnbrechende Veränderungen
- In der Entwicklervorschau eingeführte Signale: alternative/komplementäre granulare Reaktivität zu Zone.js.
- Builder esbuild in der Entwicklervorschau für
ng build: Deutlich schnellere Build-Zeiten. - Erforderliche Eingaben (
@Input({ erforderlich: true })) und selbstschließende Tags in Vorlagen (). - Experimentelle Unterstützung für Jest als alternativer Testläufer zu 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: Neuer Kontrollfluss und Standard-Vite/esbuild
Überblick und bahnbrechende Veränderungen
- Neue Kontrollflusssyntax in Vorlagen (
@if,@for,@switch) stabil, ersetzt*ngIf/*ngFormit besserer Renderleistung. - Builder basierend auf esbuild/Vite wird zum Standard für neue Projekte (wesentlich schnellere Serverentwicklung).
@deferfür deklaratives verzögertes Laden von Vorlagenblöcken (aufschiebbare Ansichten).
<!-- 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>
}
Winkel 18: Zonenloses Experiment und Material 3
Überblick und bahnbrechende Veränderungen
- Experimentelle zonenlose Änderungserkennung: Möglichkeit, Zone.js aus dem Bundle für signalbasierte Anwendungen zu entfernen.
- Angular Material 3 (Material Design 3) stabil, mit neuen thematischen Token-Designs.
- Ereigniswiedergabe für Anwendungen mit SSR/Hydratation: Benutzerereignisse während der Hydratation gehen nicht mehr verloren.
// main.ts — opt-in sperimentale a zoneless (rimuove la dipendenza da Zone.js)
bootstrapApplication(AppComponent, {
providers: [provideExperimentalZonelessChangeDetection()],
});
Winkel 19: Standardmäßig eigenständig und inkrementelle Flüssigkeitszufuhr
Überblick und bahnbrechende Veränderungen
- Neue Projekte, die von
ng newgeneriert wurden, sind standardmäßig eigenständig:NgModuleist nicht mehr das Standardgerüst. - Inkrementelle Hydratation: selektive Hydratation von Teilen der Seite statt der gesamten Anwendung in großen Mengen, mit direkten Vorteilen für die Zeit bis zur Interaktion.
- Neue signalbasierte Grundelemente (
linkedSignal,resource) für das Abrufen abgeleiteter Zustände und reaktiver Daten.
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),
});
Winkel 20 und 21: Überprüfen Sie immer die offizielle Dokumentation
Für diese beiden Veröffentlichungen, die zum Zeitpunkt der Erstellung dieses Handbuchs aktuell waren, sind die genauen Details von Brechende Änderungs- und Abhängigkeitsanforderungen müssen immer vorher mit den offiziellen Befehlen bestätigt werden Planen Sie das Upgrade – die allgemeine Richtung ist Signalkonsolidierung und zonenlos in Richtung Volle Stabilität, weitere Reduzierung des Standardpakets und kontinuierliche Weiterentwicklung des Builders esbuild/Vite, genaue Daten und spezifische API-Details sollten jedoch im Einzelfall überprüft werden.
# 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: von rxjs-kompatibel zu Entfernung
In Projekten, die mit Angular 10 gestartet wurden, ist es üblich, dass rxjs-compat immer noch installiert ist
Unterstützt die Syntax mit verketteten Operatoren, die vorab weitergeleitet werden können. Es sollte so schnell wie möglich entfernt werden: zusätzlich zu
Durch das Aufblähen des Bundles werden veraltete Elemente ausgeblendet, die der Compiler andernfalls sofort melden würde.
// 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
Testen: von Karma/Protractor bis Jest/Cypress
Protractor ist vom Angular-Team selbst seit 2022 veraltet und sollte trotzdem ersetzt werden Winkelzielversion. Karma bleibt länger funktionsfähig, aber Jest (experimentell unterstützt). Ab Angular 16) bietet deutlich schnellere Ausführungszeiten in 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');
});
});
Automatisierungsskripte für sequentielle Upgrades
#!/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- und pnpm-Arbeitsbereich
In einem Monorepo mit gemeinsam genutzten internen Bibliotheken ist die Update-Reihenfolge wichtig: Zuerst aktualisieren
gemeinsam genutzte Bibliotheken (überprüfen, ob jede peerDependencies einen kompatiblen Bereich deklariert
mit dem neuen Hauptprogramm), kompilieren Sie sie neu und aktualisieren Sie dann die Verbraucheranwendungen. Mit Nx migrieren nx
Latest orchestriert diese Reihenfolge automatisch für Pakete, die vom Arbeitsbereich verwaltet werden.
# Nx — migrazione orchestrata dell'intero workspace
npx nx migrate latest
npx nx migrate --run-migrations
CI/CD: Aktualisieren von Pipelines
# 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
Aktualisieren Sie immer die Knotenversion in der Pipeline bevor, indem Sie ng update ausführen
lokal: Eine Nichtübereinstimmung zwischen lokalem Knoten und CI-Knoten ist eine häufige Ursache für „Funktioniert auf meinem Computer“.
während Upgrades.
Auswirkungen auf Leistung und Paket
- Ivy vs. View Engine: durchschnittlich kleinere Bündel und effektiveres Tree-Shaking bereits seit dem Übergang zu Ivy (Angular 9-13).
- Entfernen von ngcc: Schnellere Builds nach Angular 13, wenn alle Bibliotheken im nativen Angular-Paketformat Ivy veröffentlicht werden.
- esbuild/Vite: Reduzieren Sie die Build- und Entwicklungsserverzeiten im Vergleich zum alten Webpack-Builder drastisch, beginnend in Angular 16-17.
- Standalone-Komponenten: Eliminieren Sie die Boilerplate von
NgModulesund verbessern Sie das feinkörnige Baumrütteln pro Komponente. - Signale und zonenlos: Mögliche Entfernung von Zone.js aus dem endgültigen Paket, was zu einer Größenreduzierung und unnötigen Änderungserkennungsschleifen führt.
- Differenzielles Laden: In neueren Versionen entfernt, da die moderne Browserunterstützung die Notwendigkeit separater ES5/ES2015+-Bundles überflüssig gemacht hat.
Bekannte Probleme und häufige Problemumgehungen
- Typfehler nach dem Aktivieren des strikten Modus: Aktivieren Sie es schrittweise Datei für Datei mit temporärem
// @ts-strict-ignore, anstatt das gesamte Upgrade zu blockieren. - Veraltete Bibliotheken von Drittanbietern: Überprüfen Sie zuerst mit
npm veraltetund ziehen Sie temporäre Forks oder Patches überpatch-packagein Betracht, wenn die Bibliothek aufgegeben wird. - Peer-Abhängigkeitskonflikt mit
--force: Dokumentieren Sie immer, warum es notwendig war, um nicht den Überblick über versteckte technische Schulden zu verlieren. @forohnetrack: Neuer Kontrollfluss erforderttrackobligatorisch, ein häufiger Build-Fehler bei der Migration von*ngFür.
Checkliste vor dem Upgrade
- Dedizierter Zweig für Upgrades, niemals direkt auf dem Hauptzweig.
- Bestehende Testabdeckung, gemessen als Basislinie vor Beginn.
- Sauberer Issue-Tracker: Es sind noch keine bekannten Fehler offen, die mit einer Upgrade-Regression verwechselt werden könnten.
- Backup/Git-Tag der aktuellen Arbeitsversion, bereit für sofortiges Rollback.
Rollback-Checkliste
- Git-Tag vor dem Upgrade wird immer vor dem Start erstellt (
Git-Tag vor dem Upgrade-v10). package-lock.jsonwird bei jedem Schritt festgeschrieben, um das genaue vorherige Abhängigkeitsdiagramm wiederherzustellen.- CI/CD-Pipeline, die die vorherige getaggte Version ohne manuelle Änderungen bereitstellen kann.
- Wenn das Projekt über Datenmigrationen verfügt, die mit einer Funktion in der neuen Version verknüpft sind, überprüfen Sie vor der Bereitstellung, ob diese rückgängig gemacht werden können.
30/60/90-Tage-Betriebsplan
Tage 1-30: Winkel 10 → 14
- Sequentielles Upgrade 10→11→12→13→14 auf dediziertem Zweig – KPI: Green Build bei jedem Schritt, 0 bekannte funktionale Regressionen.
- Entfernung von
rxjs-compatund verbleibender ViewEngine – KPI: 0 veraltete Warnungen in Build.
Tage 31-60: Winkel 15 → 18
- Einführung eigenständiger Komponenten auf neuen Modulen, E2E-Migration zu Cypress – KPI: 0 verbleibende Winkelmessertests.
- Sequentielles Upgrade 15→16→17→18, Einführung des neuen Kontrollflusses in den am häufigsten besuchten Vorlagen – KPI: reduzierte Erstellungszeit, gemessen vorher/nachher.
Tage 61-90: Winkel 19 → 21
- Endgültiges Upgrade auf die Zielversion, bei jedem Schritt anhand der offiziellen Dokumentation überprüft – KPI: Build- und Testerfolgsrate bei 100 % bei der endgültigen Version.
- Zonenlose/Signalbewertung der Komponenten mit dem höchsten Datenverkehr – KPI: endgültige Paketgröße im Vergleich zur Basislinie vor dem Upgrade.
Fallstudie 1: Unternehmens-App mit Monorepo Nx
Eine Unternehmensanwendung auf Monorepo Nx (8 gemeinsam genutzte interne Bibliotheken, Angular 10) wurde fertiggestellt
Upgrade auf Angular 18 in 14 Wochen mit 1,5 engagierten Entwicklern (~420 Personenstunden).
Summen). Hauptprobleme: 3 Bibliotheken von Drittanbietern ohne native Ivy-Unterstützung, behoben mit
ngcc erzwungene Aktualisierung auf Angular 12 und anschließender Ersatz durch beibehaltene Alternativen.
Ergebnis: Reduzierung des anfänglichen Pakets um 28 % (eigenständige Komponenten + Esbuild), CI-Erstellungszeit
von 9 auf 3 Minuten verkürzt.
Fallstudie 2: E-Commerce mit Winkelmaterial
Eine E-Commerce-Site mit starker Abhängigkeit von Angular Material (Angular 11) hat das Upgrade auf abgeschlossen
Angular 17 in 8 Wochen mit 2 Teilzeitentwicklern (~180 Personenstunden). Der Übergang zu Material 3
(MDC-basiert) erforderte eine vollständige visuelle Prüfung der benutzerdefinierten Komponenten, was das größte Problem darstellte
teuer der gesamten Migration. Ergebnis: 12 latente Layoutfehler wurden während des Audits behoben.
Die Zeit bis zur Interaktion hat sich dank des neuen Kontrollflusses und @defer on um 22 % verbessert
unkritische Above-the-Fold-Widgets.
FAQ
Können Sie beim Upgrade eine Hauptversion überspringen?
Nicht empfohlen: ng-Update Wenden Sie Migrationsschemata an, die für jeden Hauptzweig spezifisch sind. Wenn Sie eines überspringen, besteht die Gefahr unvollständiger Codetransformationen.
Wie lange dauert ein Upgrade von Angular 10 auf 21 im Durchschnitt?
Hängt stark von der Größe des Projekts und den beteiligten Drittbibliotheken ab; Echte Unternehmensprojekte erfordern in der Regel 2 bis 4 Monate mit teilweise eigenem Aufwand.
Müssen Sie alle eigenständigen Komponenten neu schreiben?
Nein, Standalone und NgModule können über einen langen Zeitraum koexistieren; Eine Migration kann bei Modulen, die aus anderen Gründen berührt werden, willkommen und opportunistisch sein.
Was tun, wenn eine Drittanbieterbibliothek das neue Hauptfach nicht unterstützt?
Prüfen Sie gepflegte Alternativen, ziehen Sie einen temporären Fork mit minimalen Patches in Betracht oder isolieren Sie die Bibliothek hinter einem Adapter, um sie in Zukunft einfacher ersetzen zu können.
Istng update --force sicher?
Erst nach manueller Überprüfung, ob die betroffenen Bibliotheken noch funktionieren; Es handelt sich nicht um ein Flag, das als automatischer Standardwert verwendet werden kann.
Sollte Zone.js sofort entfernt werden?
Nein, Zoneless entwickelt sich in neueren Versionen noch weiter; Erwägen Sie die Entfernung erst nach einer vollständigen Prüfung der Komponenten, die implizit vom automatischen Digest abhängen.
Wie können Sicherheitslücken während des Upgrades auftreten?
Mit npm-Audit bei jedem Schritt und, für Unternehmensprojekte, einem dedizierten Scanner wie Snyk, der in CI integriert ist.
Müssen Sie wirklich von Karma auf Jest migrieren?
Nein, Karma bleibt länger unterstützt; Scherz ist eine Option zur Beschleunigung von CI und keine zwingende Voraussetzung für neue Hauptfächer.
Was passiert mit bestehenden Winkelmessertests?
Sie sollten unabhängig von der Zielversion durch Cypress oder Playwright ersetzt werden, da Protractor vom Angular-Team selbst veraltet ist.
Wie schätzen Sie den Aufwand eines Multi-Major-Upgrades ein?
Summiert man den Aufwand für jeden Major (Build, Behebung bahnbrechender Änderungen, Test) plus einen Puffer für nicht aktualisierte Bibliotheken von Drittanbietern, normalerweise das größte Risiko.
Ist es notwendig, Node mit jedem Angular-Hauptfach zu aktualisieren?
Nicht immer für jedes einzelne Hauptfach, aber es muss in der Kompatibilitätsmatrix überprüft werden: Einige Hauptfächer erhöhen die Mindestanforderung von Node.
Ist es besser, ein Upgrade in einem großen PR oder in vielen kleinen durchzuführen?
Viele kleine PRs, einer für die Hauptversion, um das Risiko zu isolieren und das Rollback eines einzelnen Schritts im Falle einer Regression zu erleichtern.
Häufige Fehler, die es zu vermeiden gilt
- Hauptversion überspringen, um „es zuerst zu tun“: Migrationsschemata sollen nacheinander angewendet werden, das Überspringen eines Schemas führt zu unvollständigen Transformationen.
- Lesen Sie nicht das Änderungsprotokoll jedes Majors: Einige Breaking Changes verfügen nicht über einen automatischen Schaltplan und erfordern einen manuellen Eingriff.
- Veraltungswarnungen ignorieren: Sie werden im nächsten Major zu Blockierungsfehlern. Es ist besser, sie zu beheben, wenn es sich immer noch nur um Warnungen handelt.
--forceohne Überprüfung verwendet: Versteckt echte Inkompatibilitäten, die später in der Produktion auftauchen.- Node in CI nicht vor dem Gebietsschemacode aktualisieren – führt zu Builds, die nur auf einem Computer funktionieren.
- Entfernung von rxjs-compat verzögern: RxJS-Abwertungen ausblenden, die der Compiler andernfalls melden würde.
- Keine Git-Tags vor dem Start des Upgrades: Macht das Rollback im Falle einer Regression viel langsamer und riskanter.
- E2E-Tests auf Protractor werden „vorerst“ beibehalten: Protractor ist veraltet, jeder Monat Migrationsverzögerung erhöht die technische Verschuldung.
- Aktivieren Sie den strikten TypeScript-Modus für das gesamte Projekt auf einen Schlag.: Erzeugen Sie Hunderte gleichzeitiger Fehler, vorzugsweise Modul für Modul.
- Messen Sie die Bundle-Größe nicht vorher/nachher: Ohne eine Baseline kann nicht überprüft werden, ob das Upgrade wirklich die erwarteten Leistungsvorteile gebracht hat.
- Interne Monorepo-Bibliotheken nach Consumer-Apps aktualisieren: Verursacht vorübergehende Inkompatibilitäten, die richtige Reihenfolge ist immer die Bibliotheken zuerst, die Apps später.
- Kein Rollback-Plan für CI/CD-Pipelines: Ein Upgrade, das den Produktions-Build ohne einen schnellen Rollback-Pfad unterbricht, verwandelt ein technisches Problem in einen Vorfall.
So überprüfen Sie
- Aktuelle Version prüfen und verfügbar:
ng-Versionundnpm view @angular/core-Versionen. - Führen Sie vor jedem echten Update einen Probelauf durch:
ng update @angular/core@X --dry-run. - Prüfen Sie die Schwachstellen nach jedem Schritt:
npm audit. - Überprüfen Sie den Produktions-Build:
ng build --configuration Production. - Führen Sie die gesamte Testsuite aus:
npm test -- --watch=falseund die E2E Cypress Suite. - Messen Sie die Bundle-Größe vorher/nachher mit
npx webpack-bundle-analyzeroder der Angular CLI-Build-Ausgabe.
Fazit
Bei einem Upgrade von Angular 10 auf 21 handelt es sich nicht um eine einzelne Veranstaltung, sondern um ein mehrmonatiges Programm mit elf Etappen
sequentiell, jedes mit seinen eigenen Risiken und Vorteilen. Das Muster, das in der Praxis funktioniert, ist
Immer das Gleiche: ein Major nach dem anderen, ng-Update, gefolgt von grünen Builds und vorherigen Tests
Fahren Sie fort, Git-Tags bei jedem Schritt für ein schnelles Rollback und eine systematische Überprüfung
offizielle Dokumentation für neuere Versionen, deren Details noch nicht in der konsolidiert sind
kollektive Erinnerung an das Team.
Möchten Sie einen detaillierten Migrationsplan für Ihr spezifisches Projekt oder eine Bewertung? Wie viel Aufwand ist erforderlich? Fordern Sie ein technisches Audit an: In wenigen Stunden Codebasisanalyse ist es soweit Sie können die Zeiten, Hauptrisiken und Bibliotheken von Drittanbietern abschätzen, die während des Upgrades überwacht werden sollen.