Node.js 15 est disponible et apporte le support de npm 7, une implémentation expérimentale AbortController
ainsi qu'une mise à jour du moteur JavaScript V8 qui passe en version 8.6
L'équipe de développement de Node.js a annoncé la disponibilité de la version 15. Node.js 15 vient donc remplacer Node.js 14 en tant que version « actuelle », tandis que Node.js 14 sera promu LTS (long-term support - support à long terme) plus tard ce mois-ci. Étant donné qu'il s'agit d'un numéro de version impair, Node.js 15 ne sera pas promu en LTS. Il faut donc garder cela à l'esprit étant donné que le projet sous l'égide de la Fondation OpenJS recommande généralement l'utilisation d'une ligne de version LTS pour les déploiements en production.
Voici quelques-unes des améliorations / nouveautés apportées par cette version :
AbortController
Node.js 15 propose une implémentation expérimentale d'AbortController. AbortController est une classe d'utilitaire globale utilisée pour signaler l'annulation dans certaines API basées sur Promise, et qui s'appuie sur l'API Web AbortController:
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 const ac = new AbortController(); ac.signal.addEventListener('abort', () => console.log('Aborted!'), { once: true }); ac.abort(); console.log(ac.signal.aborted); // Prints True
Dans l'exemple ci-dessus, l'événement abort est déclenché lorsque ac.abort() est appelé. L'AbortController ne déclenchera l'événement abort qu'une seule fois. Les écouteurs d'événements attachés à AbortSignal doivent utiliser l'option {once: true} (ou l'équivalent de l'API EventEmitter - once()) pour garantir que l'écouteur d'événements est supprimé une fois que l'événement abort est géré.
N-API 7
N-API est une API pour la création d'addons natifs. Il est indépendant du runtime JavaScript sous-jacent (par exemple, V8) et est maintenu dans le cadre de Node.js lui-même.
Pourquoi utiliser des addons natifs ? Voici quelques raisons :
- Calculs lourds : Comme le code natif a de meilleures performances que le JavaScript, il est logique de déplacer des charges de calcul importantes vers un addon natif. Il faut cependant faire attention au léger overhead lorsqu'on passe du contexte JavaScript à C++ : il est généralement négligeable, mais il réduira les performances s’il est trop fréquent.
- Code asynchrone : Node.js est exécuté sur un seul thread, l’event loop. Il délègue des tâches bloquantes à d’autres threads, des workers du pool de workers (“Worker Pool”). Lors de l’écriture d’un addon natif, vous pouvez et devez également créer des workers pour vos tâches lourdes ou des tâches I/O bloquantes.
- Binding de bibliothèques C/C++ : Si vous souhaitez utiliser une bibliothèque C ou C++ dans votre code Node.js, vous pouvez binder les fonctionnalités de la bibliothèque afin de pouvoir l’utiliser dans Node.js.
Pour cette version, l'équipe explique « Alors que nous rétroportons les nouvelles versions de N-API vers les autres versions de LTS Node.js, il convient de mentionner que N-API 7 est nouveau depuis la dernière version majeure et apporte des méthodes supplémentaires pour travailler avec ArrayBuffers. »
npm 7
npm est le gestionnaire de paquets officiel de Node.js. Depuis la version 0.6.3 de Node.js, npm fait partie de l'environnement et est donc automatiquement installé par défaut. npm fonctionne avec un terminal et gère les dépendances pour une application. Il permet également d'installer des applications Node.js disponibles sur le dépôt npm.
Node.js 15 est livré avec une nouvelle version majeure de npm qui a été présentée la semaine dernière : npm 7.
npm 7 est livré avec des fonctionnalités très attendues et demandées, notamment:
- Les espaces de travail : ensemble de fonctionnalités de l'interface de ligne de commande npm qui prennent en charge la gestion de plusieurs packages à partir d'un package racine unique de niveau supérieur.
- L'installation automatique des dépendances entre pairs : Dans certains cas, vous souhaitez exprimer la compatibilité de votre package avec un outil ou une bibliothèque hôte, sans nécessairement faire une require de cet hôte. Ceci est généralement appelé plugin. Notamment, votre module peut exposer une interface spécifique, attendue et spécifiée par la documentation hôte.
Par exemple:
Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 { "name": "tea-latte", "version": "1.3.5" "peerDependencies": { "tea": "2.x" } }
Cela garantit que votre paquet tea-latte peut être installé avec la deuxième version majeure du paquet hôte tea uniquement. Le package hôte est automatiquement installé si nécessaire. npm install tea-latte pourrait éventuellement générer le graphe de dépendances suivant:
Essayer d'installer un autre plugin avec une exigence contradictoire provoquera une erreur. Pour cette raison, il est nécessaire de s'assurer que vos exigences en matière de plug-in sont aussi larges que possible et de ne pas les verrouiller à des versions de correctifs spécifiques.Envoyé par Sortie
Avant npm 7, les développeurs devaient gérer et installer leurs propres dépendances entre pairs. Le nouvel algorithme de dépendance entre pairs garantit qu'une dépendance entre pairs correspondante est trouvée au niveau ou au-dessus de l'emplacement de la dépendance entre pairs dans l'arborescence node_modules.- package-lock v2 et support de yarn.lock: L'équipe a expliqué que son nouveau format package-lock va apporter la possibilité de faire des builds reproductibles de manière déterministe et inclut tout ce dont npm aura besoin pour faire des builds de l'arborescence entière des packages. Avant npm 7, les fichiers yarn.lock étaient ignorés, le cli npm peut désormais utiliser yarn.lock comme source de métadonnées de package et de conseils de résolution.
unhandledRejection« À partir de Node.js 15, le mode par défaut pour unhandledRejection est changé en throw (de warn). En mode throw, si un hook unhandledRejection n'est pas défini, le unhandledRejection est déclenché comme une exception non interceptée. Les utilisateurs qui ont un hook unhandledRejection ne devraient voir aucun changement de comportement, et il est toujours possible de changer de mode à l'aide de l'indicateur de processus --unhandled-rejection=mode.
« Node.js a émis un UnhandledPromiseRejectionWarning par défaut pour de nombreuses versions et la décision de changer le mode à lancer a été acceptée sur la base des résultats de l'enquête Node.js User Insights: Unhandled Promise Rejections, et enfin par le vote du comité directeur technique Node.js. »
V8 8.6
Le moteur JavaScript V8 a été mis à jour vers la version V8 8.6 (le moteur V8 8.4 est le dernier disponible dans Node.js 14). Outre les ajustements et améliorations des performances, la mise à jour V8 apporte également les fonctionnalités de langage suivantes :
- Promise.any() MDN (de V8 8.5)
- AggregateError MDN (de V8 8.5)
- String.prototype.replaceAll() MDN (de V8 8.5)
- Opérateurs d'affectation logique &&=, ||= et ??= MDN (de V8 8.5)
Télécharger Node.js v15.0.0
Source : note de version
Partager