Quoi de neuf dans Angular 10.1

Angular 10.1.0, une version complémentaire d'Angular 10, a été publiée le 2 septembre, apportant des améliorations de performances au compilateur et au routeur ainsi qu'un nouvel outil d'extraction de messages. 

Angular 10 est devenu généralement disponible en tant que version de production le 24 juin. La mise à niveau majeure du framework basé sur TypeScript développé par Google a mis davantage l'accent sur les améliorations de la qualité, des outils et de l'écosystème que sur les nouvelles fonctionnalités.

Angular 10 est plus petit que les versions précédentes d'Angular. Les nouvelles fonctionnalités incluent un nouveau sélecteur de plage de dates dans la bibliothèque de composants de l'interface utilisateur du matériau angulaire et des avertissements pour les importations CommonJS. Les avertissements d'importation CommonJS alertent les développeurs lorsqu'une dépendance empaquetée avec CommonJS pourrait entraîner des applications plus volumineuses et plus lentes, permettant aux développeurs de remplacer un ensemble de modules ECMAScript.

De plus, des paramètres facultatifs plus stricts offrent une configuration de projet plus stricte lors de la création d'un nouvel espace de travail avec ng new, via ng new --strict. L'activation de cet indicateur initialise un nouveau projet avec de nouveaux paramètres pour améliorer la maintenabilité, aider à détecter les bogues et permettre à la CLI d'effectuer des optimisations avancées sur une application.

Où télécharger Angular 10

Vous pouvez trouver la version générale d'Angular 10 sur GitHub. Pour mettre à jour votre installation Angular actuelle, vous pouvez exécuter cette commande:

ng update @ angular / cli @ angular / core

Nouvelles fonctionnalités d'Angular 10.1.0

La version Angular 10.1.0, disponible sur GitHub, comprend les nouvelles fonctionnalités et améliorations suivantes: 

  • Pour améliorer les performances dans le compiler-cli, Angular 10.1 a un correctif pour les régressions de performances affectant la réutilisation incrémentielle des programmes.
  • Pour les performances du routeur, l' prioritizedGuardValueopérateur est appliqué pour optimiser les CanLoadprotections.
  • ProgramBasedEntryPointFinderréutilisera EntryPointManifestpour charger les dépendances de point d'entrée lorsque cela est possible, ce qui évite d'avoir à les analyser à nouveau à chaque invocation de ngcc.
  • Un nouvel outil d'extraction de messages est pris en charge, qui sera éventuellement intégré dans la CLI.
  • Pour l'outil de génération Bazel, LinkabablePackageInfoest ajouté à la ng-modulerègle, permettant à l'éditeur de liens de lier correctement les ng_modulecibles dans les actions d'exécution de Node.js.
  • Plus d'informations sont ajoutées au diagnostic produit pour les erreurs d'évaluation statiques.
  • Une option a été ajoutée pour la prise en charge absolue des URL HTTP.
  • La prise en charge de TypeScript 4.0 a été ajoutée au compilateur.
  • canparse() les diagnostics sont exposés.
  • Des améliorations de performances ont été apportées au routeur, aux formulaires, à la CLI du compilateur et à l'outil de compatibilité du compilateur ngcc.
  • La modification des hooks de cycle de vie peut être effectuée à tout moment avant le bootstrap.
  • Un certain nombre de correctifs importants sont proposés pour le cœur, le routeur et d'autres parties d'Angular.

Nouvelles fonctionnalités d'Angular 10

Les principales caractéristiques d'Angular 10 sont les suivantes:

  • TSlib, la bibliothèque d'exécution pour TypeScript contenant des fonctions d'assistance, a été mise à jour vers TSlib 2.0. L'outil d'analyse statique TSLint pour TypeScript a été mis à jour vers TSLint 6.
  • Une interface de compilateur a été ajoutée qui encapsule le compilateur ngtsc réel. Le compilateur spécifique au service de langage gère plusieurs fichiers de vérification de type à l'aide de l'interface du projet, créant des Scriptinfos si nécessaire.
  • La configuration du navigateur pour les nouveaux projets a été mise à jour pour exclure les navigateurs plus anciens et moins utilisés. La prise en charge est déconseillée pour Internet Explorer 9, Internet Explorer 10 et Internet Explorer Mobile.
  • Angular Package Format n'inclut plus les bundles ESM5 ou FESM5, ce qui économise le temps de téléchargement et d'installation lors de l'exécution yarnou npm installpour les packages et bibliothèques Angular.
  • Pour le compilateur, des plages de noms ont été ajoutées pour les lectures de propriétés et les appels de méthode.
  • EntryPointFinder, un chercheur de point d'entrée basé sur un programme, a été ajouté et peut être amorcé à partir des importations dans un programme spécifié par un fichier tsjconfig.json. Cela devrait être plus rapide que DirectoryWalkerEntryPointFinderlorsque le programme actif n’importe qu’une petite proportion des points d’entrée installés. 
  • La saisie semi-automatique est supprimée des entités HTML, par exemple en &raison d'une valeur douteuse et d'un problème de performances.
  • Le mappage explicite est exposé de la fermeture aux fichiers devmode. Cette fonctionnalité est destinée aux outils de développement qui doivent traduire les entrées de construction de production en leurs équivalents en mode de développement.
  • Dans un changement de rupture, le générique a été rendu obligatoire pour ModuleWithProviders. Un paramètre de type générique était requis pour que le ModuleWithProvidersmodèle fonctionne avec le pipeline de compilation et de rendu Ivy, mais avant cette validation, View Engine permettait d'omettre le type générique. Si un développeur utilise ModuleWithProviderssans type générique, une migration de la version 10 mettra à jour le code. Mais si un développeur utilise View Engine et en fonction d'une bibliothèque qui omet le type générique, une erreur de construction sera émise. Dans ce cas, ngcc n'aidera pas et la migration ne couvrira que le code de l'application. L'auteur de la bibliothèque doit être contacté pour réparer sa bibliothèque. Pour contourner le problème, skipLibChecks peut être défini sur false dans tsconfig ou mettre à jour une application pour utiliser uniquement Ivy.
  • TypeScript 3.9 est désormais disponible, la prise en charge de TypeScript 3.8 ayant été supprimée. C'est un changement radical. TypeScript 3.6 et TypeScript 3.7 ne sont également plus pris en charge.
  • Des améliorations des performances de vérification de type ont été apportées au compiler-cli.
  • Pour améliorer les performances, le calcul de basePathsa été rendu paresseux, donc le travail n'est effectué que si nécessaire dans TargetedEntryPointFinder. Auparavant, basePaths était calculé chaque fois que le chercheur était instancié, ce qui était un gaspillage d'efforts dans le cas où le point d'entrée ciblé avait déjà été traité.
  • La fusion de plusieurs fichiers de traduction est prise en charge. Auparavant, un seul fichier de traduction par langue était autorisé. Désormais, les utilisateurs peuvent spécifier plusieurs fichiers par langue et les transactions de chaque fichier seront fusionnées par ID de messagerie.
  • Les délais de verrouillage asynchrone peuvent être configurés. Cela ajoute la prise en charge du fichier ngcc.config.js pour définir les  options retryAttemptset retryDelaypour AsyncLocker. Un test d'intégration ajoute une nouvelle vérification pour un délai d'expiration et utilise le ngcc.config.js pour réduire le délai d'expiration afin d'éviter que le test ne prenne trop de temps.
  • Dans un changement radical, les avertissements concernant des éléments inconnus sont désormais consignés comme des erreurs. Bien que cela ne casse pas une application, cela peut déclencher des outils qui s'attendent à ce que rien ne soit enregistré via console.error. 
  • Dans un autre changement de rupture, tout résolveur qui retourne EMPTYannulera la navigation. Pour permettre à la navigation de continuer, les développeurs doivent mettre à jour les résolveurs pour mettre à jour une valeur, telle que default!Empty.
  • L'ajout d'informations de dépendance et de sélecteurs ng-content aux métadonnées. Cette fonctionnalité de compilation proposée fournirait des métadonnées supplémentaires utiles pour des outils tels que le service de langage angulaire, offrant la possibilité de fournir des suggestions pour les directives / composants définis dans les bibliothèques.
  • Améliorations des performances, obtenues en réduisant la taille du manifeste de point d'entrée et une technique de mise en cache dans le manifeste. De plus, la mise en cache des dépendances est effectuée dans le manifeste de point d'entrée et lue à partir de là plutôt que d'être calculée à chaque fois. Auparavant, même si un point d'entrée n'avait pas besoin de traitement, ngcc (compilateur de compatibilité Angular Ivy) analysait les fichiers du point d'entrée pour calculer les dépendances, ce qui prenait beaucoup de temps pour les modules large_node.
  • Pour améliorer les performances de ngcc, le signalement immédiat d'un fichier de verrouillage périmé est désormais autorisé. De plus, une copie mise en cache d'un fichier tsconfig analysé est stockée et peut être réutilisée si le chemin tsconfig est le même.
  • Dans un changement de rupture, la logique a été mise à jour concernant le formatage des périodes de jour qui traversent minuit. Lors du formatage d'une heure avec le code de format bou B, la chaîne rendue ne traitait pas correctement les périodes de jour s'étendant sur plusieurs jours. Au lieu de cela, la logique revenait au cas par défaut de AM. Cette logique a été mise à jour afin qu'elle corresponde aux heures dans une période de jour qui s'étend au-delà de minuit, de sorte qu'elle rendra désormais une sortie correcte, comme at nightdans le cas de l'anglais. Les applications utilisant l'un formatDate()ou l' autre DatePipedes codes de format bet  Bseront affectées par ce changement.
  • Pour le routeur, le CanLoadgardien peut maintenant revenir Urltree. Un CanLoadgarde qui revient Urltreeannule la navigation en cours et redirige. Cela correspond au comportement actuel disponible pour les CanActivategardes qui a également été ajouté. Cela n'affecte pas le préchargement. Un CanLoadgarde bloque toute précharge; les itinéraires avec un CanLoadgarde ne seront pas préchargés et les gardes ne seront pas exécutés dans le cadre du préchargement.
  • Propagation de la plage de valeurs correcte dans un ExpressionBinding d'une expression de microsyntaxe à ParsedProperty, qui à son tour propagerait la plage vers les AST modèles (VE et Ivy). Cette proposition est également pour le compilateur.
  • Dans un correctif du noyau, une logique serait ajoutée à la migration de classe non décorée pour décorer les classes dérivées de classes non décorées qui utilisent des fonctionnalités angulaires.
  • Dans un changement de rupture, le type d'Urlmatcher reflètera qu'il pourrait toujours retourner null.
  • Pour le technicien de service, un correctif a été mis en place pour une situation dans laquelle il était possible que le technicien de service ne s'enregistre jamais en cas de tâche de longue durée ou d'expiration récurrente.
  • Un certain nombre de corrections de bogues ont été apportées, y compris le compilateur évitant les expressions non définies dans un tableau troué et le noyau évitant une erreur de migration lorsqu'un symbole inexistant est importé. Il existe également une solution de contournement dans le noyau pour le bogue d'inlining Terser. Un autre correctif de bogue identifie correctement les modules affectés par les remplacements dans TestBed.
  • Angular NPM ne contient plus certains commentaires jsdoc pour prendre en charge les optimisations avancées du compilateur Closure. C'est un changement radical. La prise en charge de Closure Compiler dans les packages est expérimentale et interrompue depuis un certain temps. Quiconque utilise Closure Compiler a probablement intérêt à consommer directement des packages Angular construits à partir de sources plutôt que de consommer des versions publiées sur NPM. Comme solution de contournement temporaire, les utilisateurs peuvent envisager d'utiliser leur pipeline de build actuel avec l'indicateur de fermeture --compilation_level=SIMPLE. Cet indicateur garantira que le pipeline de construction produit des artefacts à construire et exécutables, au prix d'une augmentation de la taille de la charge utile en raison de la désactivation des optimisations avancées.