Wat is er nieuw in Angular 10.1

Angular 10.1.0, een vervolgrelease voor Angular 10, werd op 2 september uitgebracht en bracht prestatieverbeteringen aan de compiler en router samen met een nieuwe tool voor het extraheren van berichten. 

Angular 10 kwam op 24 juni algemeen beschikbaar als productierelease. De grote upgrade van het door Google ontwikkelde, TypeScript-gebaseerde framework legde meer nadruk op verbeteringen in kwaliteit, tools en ecosystemen dan op nieuwe functies.

Angular 10 is kleiner dan eerdere versies van Angular. Nieuwe mogelijkheden zijn onder meer een nieuwe datumbereikkiezer in de Angular Material UI-componentenbibliotheek en waarschuwingen voor CommonJS-import. CommonJS-importwaarschuwingen waarschuwen ontwikkelaars wanneer een afhankelijkheid die is verpakt met CommonJS kan resulteren in grotere, langzamere applicaties, waardoor ontwikkelaars een ECMAScript-modulebundel kunnen vervangen.

Bovendien bieden optionele strengere instellingen een strengere projectinstelling bij het maken van een nieuwe werkruimte met ng new, via ng new --strict. Door deze vlag in te schakelen, wordt een nieuw project geïnitialiseerd met nieuwe instellingen om de onderhoudbaarheid te verbeteren, bugs op te sporen en de CLI in staat te stellen geavanceerde optimalisaties op een app uit te voeren.

Waar Angular 10 downloaden

Je kunt de algemene release van Angular 10 vinden op GitHub. Om uw huidige Angular-installatie bij te werken, kunt u deze opdracht uitvoeren:

ng update @ angular / cli @ angular / core

Nieuwe functies in Angular 10.1.0

De Angular 10.1.0-release, beschikbaar op GitHub, bevat de volgende nieuwe mogelijkheden en verbeteringen: 

  • Om de prestaties in de compiler-cli te verbeteren, heeft Angular 10.1 een oplossing voor prestatieregressies die het incrementeel hergebruik van programma's beïnvloeden.
  • Voor routerprestaties wordt de prioritizedGuardValueoperator ingezet om CanLoadbewakers te optimaliseren .
  • ProgramBasedEntryPointFinderzal hergebruiken EntryPointManifestom toegangspuntafhankelijkheden waar mogelijk te laden, waardoor wordt voorkomen dat ze opnieuw moeten worden geparseerd bij elke aanroep van ngcc.
  • Er wordt een nieuwe tool voor het extraheren van berichten ondersteund, die uiteindelijk in de CLI zal worden geïntegreerd.
  • Voor de Bazel-buildtool LinkabablePackageInfowordt aan de ng-moduleregel toegevoegd , waardoor de linker ng_moduledoelen correct kan koppelen in runtime-acties van Node.js.
  • Er wordt meer inzicht toegevoegd aan de diagnose die wordt geproduceerd voor statische evaluatiefouten.
  • Er is een optie toegevoegd voor absolute URL HTTP-ondersteuning.
  • TypeScript 4.0-ondersteuning is toegevoegd aan de compiler.
  • canparse() diagnostiek wordt onthuld.
  • Er zijn prestatieverbeteringen aangebracht aan de router, formulieren, de compiler-CLI en de compatibiliteitstool voor ngcc-compilers.
  • Wijziging van lifecycle hooks kan op elk moment vóór bootstrap worden gedaan.
  • Er wordt een aantal grote fixes aangeboden voor core, router en andere delen van Angular.

Nieuwe functies in Angular 10

De belangrijkste kenmerken van Angular 10 zijn onder meer:

  • TSlib, de runtime-bibliotheek voor TypeScript met hulpfuncties, is vernieuwd naar TSlib 2.0. De TSLint statische analyse tool voor TypeScript is bijgewerkt naar TSLint 6.
  • Er is een compiler-interface toegevoegd die de daadwerkelijke ngtsc-compiler omhult. De taalservicespecifieke compiler beheert meerdere typecheck-bestanden met behulp van de projectinterface en maakt zo nodig Scriptinfo.
  • De browserconfiguratie voor nieuwe projecten is bijgewerkt om oudere, minder gebruikte browsers uit te sluiten. Ondersteuning voor Internet Explorer 9, Internet Explorer 10 en Internet Explorer Mobile is beëindigd.
  • Angular Package Format bevat niet langer ESM5- of FESM5-bundels, waardoor download- en installatietijd wordt bespaard tijdens het draaien yarnof npm installvoor Angular-pakketten en bibliotheken.
  • Voor de compiler zijn naambereiken toegevoegd voor het lezen van eigenschappen en het aanroepen van methoden.
  • EntryPointFinder, een programma-gebaseerde toegangspuntzoeker, is toegevoegd die kan worden gezaaid vanuit de invoer in een programma dat is gespecificeerd door een tsjconfig.json-bestand. Dit is naar verwachting sneller dan DirectoryWalkerEntryPointFinderwanneer het actieve programma slechts een klein deel van de geïnstalleerde toegangspunten importeert. 
  • Automatische aanvulling wordt verwijderd uit HTML-entiteiten, zoals &vanwege twijfelachtige waarde en een prestatieprobleem.
  • Expliciete toewijzing wordt vanaf sluiting blootgesteld aan devmode-bestanden. Deze functie is bedoeld voor ontwikkeltools die productie-build-inputs moeten vertalen naar hun devmode-equivalenten.
  • In een ingrijpende verandering is generiek verplicht gemaakt voor ModuleWithProviders. Een generieke typeparameter is vereist om het ModuleWithProviderspatroon te laten werken met de Ivy-compilatie- en renderingpijplijn, maar vóór deze commit stond View Engine toe dat het generieke type werd weggelaten. Als een ontwikkelaar ModuleWithProviderseen generiek type gebruikt, zal een versie 10-migratie de code bijwerken. Maar als een ontwikkelaar View Engine gebruikt en afhankelijk van een bibliotheek die het generieke type weglaat, wordt er een build-fout gegenereerd. In dit geval helpt ngcc niet en heeft de migratie alleen betrekking op de applicatiecode. Er moet contact worden opgenomen met de auteur van de bibliotheek om hun bibliotheek te herstellen. Als een tijdelijke oplossing kan skipLibChecks worden ingesteld op false in tsconfig of door een app bij te werken om alleen Ivy te gebruiken.
  • TypeScript 3.9 is nu beschikbaar, waarbij ondersteuning voor TypeScript 3.8 is verwijderd. Dit is een ingrijpende verandering. TypeScript 3.6 en TypeScript 3.7 worden ook niet langer ondersteund.
  • Prestatieverbeteringen voor typecontrole zijn aangebracht in de compiler-cli.
  • Om de prestaties te verbeteren, is de berekening van basePathslui gemaakt, dus er wordt alleen gewerkt als dat nodig is in TargetedEntryPointFinder. Voorheen basePaths werd het berekend wanneer de vinder werd geïnstantieerd, wat een verspilling van moeite was in het geval dat het beoogde toegangspunt al was verwerkt.
  • Het samenvoegen van meerdere vertaalbestanden wordt ondersteund. Voorheen was slechts één vertaalbestand per landinstelling toegestaan. Nu kunnen gebruikers meerdere bestanden per landinstelling specificeren, en de transacties van elk bestand worden samengevoegd op basis van een bericht-ID.
  • Time-outs voor asynchrone vergrendeling kunnen worden geconfigureerd. Dit voegt ondersteuning toe voor het bestand ngcc.config.js voor het instellen van de retryAttemptsen retryDelay opties voor de AsyncLocker. Een integratietest voegt een nieuwe controle toe voor een time-out en gebruikt de ngcc.config.js om de time-outtijd te verkorten om te voorkomen dat de test te lang duurt.
  • In een ingrijpende verandering worden waarschuwingen over onbekende elementen nu als fouten geregistreerd. Hoewel dit een app niet kapot maakt, kan het tools activeren die verwachten dat er niets wordt geregistreerd via console.error. 
  • In een andere belangrijke wijziging EMPTYannuleert elke resolver die terugkeert de navigatie. Om de navigatie door te laten gaan, moeten ontwikkelaars de resolvers bijwerken om een ​​bepaalde waarde bij te werken, zoals default!Empty.
  • De toevoeging van afhankelijkheidsinformatie en ng-inhoudselectoren aan metadata. Deze voorgestelde compileerfunctie zou aanvullende metagegevens bieden die nuttig zijn voor tools zoals de Angular Language Service, en de mogelijkheid bieden om suggesties te doen voor richtlijnen / componenten die zijn gedefinieerd in bibliotheken.
  • Prestatieverbeteringen, bereikt door het verkleinen van het entrypointmanifest en een cachetechniek in het manifest. Bovendien wordt caching van afhankelijkheden gedaan in het entrypointmanifest en van daaruit gelezen in plaats van dat ze elke keer opnieuw worden berekend. Voorheen, zelfs als een entrypoint geen verwerking nodig had, zou ngcc (Angular Ivy compatibiliteitscompiler) de bestanden van het entrypoint parseren om afhankelijkheden te berekenen, wat veel tijd zou kosten voor large_node-modules.
  • Om de prestaties van ngcc te verbeteren, is het nu toegestaan ​​om een ​​verouderd vergrendelingsbestand onmiddellijk te rapporteren. Bovendien wordt een in de cache opgeslagen kopie van een geparseerd tsconfig-bestand opgeslagen dat opnieuw kan worden gebruikt als het tsconfig-pad hetzelfde is.
  • In een ingrijpende verandering is de logica bijgewerkt met betrekking tot het opmaken van dagperioden die middernacht overschrijden. Bij het formatteren van een tijd met de bof Bopmaakcode, behandelde de gerenderde tekenreeks de dagperioden die dagen overspanden niet goed. In plaats daarvan viel de logica terug op het standaardgeval van AM. Deze logica is bijgewerkt zodat het overeenkomt met tijden binnen een dagperiode die voorbij middernacht valt, zodat het nu de juiste uitvoer zal weergeven, zoals at nightin het geval van Engels. Toepassingen met behulp van formatDate()of DatePipeof ben  Bopmaak codes zal worden beïnvloed door deze wijziging.
  • Voor de router kan de CanLoadbewaker nu terugkeren Urltree. Een CanLoadbewaker die terugkeert, Urltreeannuleert de huidige navigatie en omleidingen. Dit komt overeen met het huidige gedrag dat beschikbaar is voor CanActivatebewakers en dat ook is toegevoegd. Dit heeft geen invloed op het vooraf laden. Een CanLoadbewaker blokkeert elke voorbelasting; alle routes met een CanLoadbewaker worden niet vooraf geladen en de bewakers worden niet uitgevoerd als onderdeel van het voorladen.
  • Voortplanting van de juiste waarde-reeks in een ExpressionBinding van een microsyntax-expressie naar ParsedProperty, die op zijn beurt de reeks zou doorgeven aan de sjabloon AST's (zowel VE als Ivy). Dit voorstel is ook voor de samensteller.
  • In een oplossing voor de kern zou logica worden toegevoegd aan migratie van onversierde klassen om afgeleide klassen van onversierde klassen te versieren die gebruik maken van Angular-functies.
  • Bij een belangrijke wijziging zal het type Urlmatcher aangeven dat het altijd null kan retourneren.
  • Voor de servicemedewerker is er een fix aangebracht voor een situatie waarin de kans bestond dat de servicemedewerker zich nooit zal registreren bij een langlopende taak of terugkerende time-out.
  • Er zijn een aantal bugfixes gemaakt, waaronder de compiler die ongedefinieerde expressies in een gatenreeks vermijdt en de kern om een ​​migratiefout te vermijden wanneer een niet-bestaand symbool wordt geïmporteerd. Er is ook een oplossing in de kern voor de inlining-bug van Terser. Een andere bugfix identificeert correct modules die worden beïnvloed door overschrijvingen in TestBed.
  • Angular NPM bevat niet langer bepaalde jsdoc-opmerkingen om de geavanceerde optimalisaties van de Closure Compiler te ondersteunen. Dit is een ingrijpende verandering. Ondersteuning voor Closure Compiler in pakketten is al enige tijd experimenteel en verbroken. Iedereen die Closure Compiler gebruikt, is waarschijnlijk beter af met Angular-pakketten die rechtstreeks uit bronnen zijn gemaakt, in plaats van versies die op NPM zijn gepubliceerd. Als tijdelijke oplossing kunnen gebruikers overwegen om hun huidige build-pijplijn te gebruiken met de afsluitingsvlag --compilation_level=SIMPLE. Deze vlag zorgt ervoor dat de build-pijplijn bouwbare, uitvoerbare artefacten produceert, ten koste van een grotere payload omdat geavanceerde optimalisaties zijn uitgeschakeld.