Was ist neu in Angular 10.1?

Angular 10.1.0, eine Folgepunktversion von Angular 10, wurde am 2. September veröffentlicht und brachte dem Compiler und Router Leistungsverbesserungen sowie ein neues Tool zum Extrahieren von Nachrichten. 

Angular 10 wurde am 24. Juni allgemein als Produktionsversion verfügbar. Das Hauptupgrade des von Google entwickelten, TypeScript-basierten Frameworks legte mehr Wert auf Verbesserungen von Qualität, Tools und Ökosystemen als auf neue Funktionen.

Angular 10 ist kleiner als frühere Versionen von Angular. Zu den neuen Funktionen gehören eine neue Datumsbereichsauswahl in der Komponentenbibliothek der Angular Material-Benutzeroberfläche und Warnungen für CommonJS-Importe. CommonJS-Importwarnungen warnen Entwickler, wenn eine mit CommonJS gepackte Abhängigkeit zu größeren, langsameren Anwendungen führen kann, sodass Entwickler ein ECMAScript-Modulpaket ersetzen können.

Darüber hinaus bieten optionale strengere Einstellungen eine strengere Projekteinrichtung, wenn ein neuer Arbeitsbereich mit ng new, via erstellt wird ng new --strict. Durch Aktivieren dieses Flags wird ein neues Projekt mit neuen Einstellungen initialisiert, um die Wartbarkeit zu verbessern, Fehler zu erkennen und der CLI die Möglichkeit zu geben, erweiterte Optimierungen für eine App vorzunehmen.

Wo kann man Angular 10 herunterladen?

Sie finden die allgemeine Version von Angular 10 auf GitHub. Um Ihre aktuelle Angular-Installation zu aktualisieren, können Sie diesen Befehl ausführen:

ng update @ angle / cli @ angle / core

Neue Funktionen in Angular 10.1.0

Die auf GitHub verfügbare Version von Angular 10.1.0 enthält die folgenden neuen Funktionen und Verbesserungen: 

  • Um die Leistung in der Compiler-CLI zu verbessern, bietet Angular 10.1 eine Korrektur für Leistungsregressionen, die sich auf die inkrementelle Programmwiederverwendung auswirken.
  • Für die Routerleistung wird der prioritizedGuardValueBediener zur Optimierung der CanLoadSchutzvorrichtungen eingesetzt.
  • ProgramBasedEntryPointFinderwird EntryPointManifestnach Möglichkeit wiederverwendet , um Einstiegspunktabhängigkeiten zu laden, wodurch vermieden wird, dass sie bei jedem Aufruf von ngcc erneut analysiert werden müssen.
  • Es wird ein neues Tool zum Extrahieren von Nachrichten unterstützt, das schließlich in die CLI integriert wird.
  • Für das Bazel-Build-Tool LinkabablePackageInfowird der ng-moduleRegel hinzugefügt , sodass der Linker ng_moduleZiele in Node.js Laufzeitaktionen ordnungsgemäß verknüpfen kann.
  • Der Diagnose für statische Bewertungsfehler werden weitere Erkenntnisse hinzugefügt.
  • Für die absolute URL-HTTP-Unterstützung wurde eine Option hinzugefügt.
  • Dem Compiler wurde TypeScript 4.0-Unterstützung hinzugefügt.
  • canparse() Diagnose werden ausgesetzt.
  • Leistungsverbesserungen wurden am Router, an den Formularen, an der Compiler-CLI und am Kompatibilitätstool des ngcc-Compilers vorgenommen.
  • Änderungen an Lifecycle-Hooks können jederzeit vor dem Bootstrap vorgenommen werden.
  • Für Core, Router und andere Teile von Angular werden eine Reihe wichtiger Korrekturen angeboten.

Neue Funktionen in Angular 10

Zu den Hauptmerkmalen von Angular 10 gehören:

  • TSlib, die Laufzeitbibliothek für TypeScript mit Hilfsfunktionen, wurde auf TSlib 2.0 aktualisiert. Das statische TSLint-Analysetool für TypeScript wurde auf TSLint 6 aktualisiert.
  • Es wurde eine Compiler-Schnittstelle hinzugefügt, die den eigentlichen ngtsc-Compiler umschließt. Der sprachdienstspezifische Compiler verwaltet mehrere Typeche-Dateien über die Projektoberfläche und erstellt bei Bedarf Scriptinfos.
  • Die Browserkonfiguration für neue Projekte wurde aktualisiert, um ältere, weniger verwendete Browser auszuschließen. Die Unterstützung für Internet Explorer 9, Internet Explorer 10 und Internet Explorer Mobile ist veraltet.
  • Das Angular-Paketformat enthält keine ESM5- oder FESM5-Bundles mehr, wodurch Download- und Installationszeit beim Ausführen yarnoder npm installfür Angular-Pakete und -Bibliotheken gespart wird .
  • Für den Compiler wurden Namensbereiche für Eigenschaftslesevorgänge und Methodenaufrufe hinzugefügt.
  • EntryPointFinderEs wurde ein programmbasierter Einstiegspunktfinder hinzugefügt, der aus den Importen in ein Programm erstellt werden kann, das in einer tsjconfig.json-Datei angegeben ist. Dies ist voraussichtlich schneller als DirectoryWalkerEntryPointFinderwenn das aktive Programm nur einen kleinen Teil der installierten Einstiegspunkte importiert. 
  • Die automatische Vervollständigung wird aus HTML-Entitäten entfernt, z. B. &aufgrund eines fragwürdigen Werts und eines Leistungsproblems.
  • Explizite Zuordnung wird vom Schließen zu Devmode-Dateien verfügbar gemacht. Diese Funktion richtet sich an Entwicklungstools, die Produktions-Build-Eingaben in ihre Devmode-Entsprechungen übersetzen müssen.
  • In einer bahnbrechenden Änderung wurde Generika für obligatorisch gemacht ModuleWithProviders. Für die Verwendung des ModuleWithProvidersMusters mit der Ivy-Kompilierungs- und Rendering-Pipeline war ein generischer Typparameter erforderlich. Vor diesem Commit ließ View Engine jedoch zu, dass der generische Typ weggelassen wurde. Wenn ein Entwickler ModuleWithProvidersohne generischen Typ verwendet, wird der Code durch eine Migration der Version 10 aktualisiert. Wenn ein Entwickler jedoch View Engine verwendet und von einer Bibliothek abhängt, in der der generische Typ weggelassen wird, wird ein Erstellungsfehler ausgegeben. In diesem Fall hilft ngcc nicht und die Migration deckt nur den Anwendungscode ab. Der Bibliotheksautor sollte kontaktiert werden, um seine Bibliothek zu reparieren. Um dieses Problem zu umgehen, kann skipLibChecks in tsconfig auf false gesetzt oder eine App aktualisiert werden, um nur Ivy zu verwenden.
  • TypeScript 3.9 ist jetzt verfügbar, wobei die Unterstützung für TypeScript 3.8 entfernt wurde. Dies ist eine bahnbrechende Veränderung. TypeScript 3.6 und TypeScript 3.7 werden ebenfalls nicht mehr unterstützt.
  • Leistungsverbesserungen bei der Typprüfung wurden an der Compiler-CLI vorgenommen.
  • Um die Leistung zu verbessern, wurde die Berechnung von basePathsverzögert, sodass die Arbeit nur bei Bedarf ausgeführt wird TargetedEntryPointFinder. Zuvor basePaths wurde immer dann berechnet, wenn der Finder instanziiert wurde, was eine Verschwendung von Aufwand war, wenn der angestrebte Einstiegspunkt bereits verarbeitet worden war.
  • Das Zusammenführen mehrerer Übersetzungsdateien wird unterstützt. Bisher war nur eine Übersetzungsdatei pro Gebietsschema zulässig. Jetzt können Benutzer mehrere Dateien pro Gebietsschema angeben, und die Transaktionen aus jeder Datei werden anhand der Nachrichten-ID zusammengeführt.
  • Zeitlimits für asynchrone Sperren können konfiguriert werden. Dadurch wird die Datei ngcc.config.js zum Festlegen der  Optionen retryAttemptsund retryDelayfür den AsyncLocker unterstützt. Ein Integrationstest fügt eine neue Prüfung für eine Zeitüberschreitung hinzu und verwendet die Datei ngcc.config.js, um die Zeitüberschreitungszeit zu verkürzen und zu verhindern, dass der Test zu lange dauert.
  • Bei einer Änderung werden Warnungen vor unbekannten Elementen jetzt als Fehler protokolliert. Dadurch wird eine App zwar nicht beschädigt, es können jedoch Tools ausgelöst werden, bei denen erwartet wird, dass nichts über console.error protokolliert wird. 
  • Bei einer weiteren Änderung bricht jeder zurückgegebene Resolver die EMPTYNavigation ab. Damit die Navigation fortgesetzt werden kann, müssen Entwickler die Resolver aktualisieren, um einen bestimmten Wert zu aktualisieren, z default!Empty.
  • Das Hinzufügen von Abhängigkeitsinformationen und ng-content-Selektoren zu Metadaten. Diese vorgeschlagene Compilerfunktion würde zusätzliche Metadaten bereitstellen, die für Tools wie den Angular Language Service nützlich sind, und die Möglichkeit bieten, Vorschläge für in Bibliotheken definierte Anweisungen / Komponenten bereitzustellen.
  • Leistungsverbesserungen, die durch Reduzieren der Größe des Einstiegspunktmanifests und einer Caching-Technik im Manifest erzielt werden. Darüber hinaus wird das Zwischenspeichern von Abhängigkeiten im Einstiegspunktmanifest durchgeführt und von dort gelesen, anstatt jedes Mal berechnet zu werden. Selbst wenn ein Einstiegspunkt nicht verarbeitet werden musste, analysierte ngcc (Angular Ivy-Kompatibilitäts-Compiler) zuvor die Dateien des Einstiegspunkts, um Abhängigkeiten zu berechnen, was für large_node-Module viel Zeit in Anspruch nahm.
  • Um die Leistung von ngcc zu verbessern, ist jetzt die sofortige Meldung einer veralteten Sperrdatei zulässig. Außerdem wird eine zwischengespeicherte Kopie einer analysierten tsconfig-Datei gespeichert, die wiederverwendet werden kann, wenn der tsconfig-Pfad identisch ist.
  • In einer bahnbrechenden Änderung wurde die Logik bezüglich der Formatierung von Tagesperioden, die Mitternacht überschreiten, aktualisiert. Beim Formatieren einer Zeit mit dem Code boder Bformatieren hat die gerenderte Zeichenfolge Tagesperioden, die sich über Tage erstreckten, nicht ordnungsgemäß verarbeitet. Stattdessen fiel die Logik auf den Standardfall von zurück AM. Diese Logik wurde aktualisiert, sodass sie mit den Zeiten innerhalb eines Tageszeitraums übereinstimmt, der über Mitternacht hinausgeht. Daher wird jetzt die korrekte Ausgabe wiedergegeben, z. B. at nightim Fall von Englisch. Anwendungen , die entweder formatDate()oder DatePipeoder die bund  BFormatcodes werden von dieser Änderung betroffen.
  • Für den Router kann der CanLoadWächter jetzt zurückkehren Urltree. Ein CanLoadzurückkehrender Wachmann Urltreebricht die aktuelle Navigation ab und leitet sie weiter. Dies entspricht dem aktuellen Verhalten der CanActivateWachen, die ebenfalls hinzugefügt wurden. Dies hat keinen Einfluss auf das Vorspannen. Eine CanLoadWache blockiert jegliches Vorspannen; Routen mit einer CanLoadWache werden nicht vorgeladen und die Wachen werden nicht als Teil der Vorladung ausgeführt.
  • Weitergabe der korrekten Wertspanne in einer ExpressionBindung eines Mikrosyntax-Ausdrucks an ParsedProperty, wodurch die Spanne wiederum an die Template-ASTs (sowohl VE als auch Ivy) weitergegeben würde. Dieser Vorschlag gilt auch für den Compiler.
  • Bei einer Korrektur des Kerns würde der Migration nicht dekorierter Klassen Logik hinzugefügt, um abgeleitete Klassen nicht dekorierter Klassen zu dekorieren, die Angular-Features verwenden.
  • Bei einer Änderung ändert der Typ von Urlmatcher, dass er immer null zurückgeben kann.
  • Für den Servicemitarbeiter wurde eine Korrektur für eine Situation vorgenommen, in der die Möglichkeit bestand, dass sich der Servicemitarbeiter niemals registriert, wenn eine Aufgabe mit langer Laufzeit oder ein wiederkehrendes Zeitlimit vorliegt.
  • Es wurde eine Reihe von Fehlerkorrekturen vorgenommen, darunter der Compiler, der undefinierte Ausdrücke in einem löchrigen Array vermeidet, und der Kern, der einen Migrationsfehler vermeidet, wenn ein nicht vorhandenes Symbol importiert wird. Es gibt auch eine Problemumgehung im Kern für den Terser-Inlining-Fehler. Eine weitere Fehlerbehebung identifiziert Module, die von Überschreibungen in TestBed betroffen sind, ordnungsgemäß.
  • Angular NPM enthält keine bestimmten jsdoc-Kommentare mehr, um die erweiterten Optimierungen des Closure Compilers zu unterstützen. Dies ist eine bahnbrechende Veränderung. Die Unterstützung für Closure Compiler in Paketen ist experimentell und seit einiger Zeit unterbrochen. Jeder, der Closure Compiler verwendet, ist wahrscheinlich besser dran, Angular-Pakete zu konsumieren, die direkt aus Quellen erstellt wurden, als auf NPM veröffentlichte Versionen. Als vorübergehende Problemumgehung können Benutzer in Betracht ziehen, ihre aktuelle Build-Pipeline mit dem Closure-Flag zu verwenden --compilation_level=SIMPLE. Dieses Flag stellt sicher, dass die Build-Pipeline baubare, ausführbare Artefakte erzeugt, was zu einer Erhöhung der Nutzlast führt, da erweiterte Optimierungen deaktiviert werden.