Quoi de neuf dans Node.js 16? –
Node.js a lancé sa dernière version majeure. Sortie en avril 2021, la v16 est la nouvelle version «actuelle». En octobre 2021, il passera à la version LTS (Long Term Support) et la maintenance se poursuivra jusqu’en 2024.
Le processus de publication de Node.js voit les mises à jour de la branche «actuelle» fusionnées dans la prochaine version majeure des fonctionnalités. Par conséquent, la v16 apporte plusieurs fonctionnalités v15 récemment ajoutées dans ce qui deviendra finalement la branche LTS. Bien que déjà disponibles dans la v15, les modifications sont nouvelles pour les utilisateurs de LTS.
Sommaire
Mises à jour du moteur JavaScript
Node.js 16 est livré avec la v9.0 du moteur JavaScript V8. Cela remplace V8 8.6 dans Node.js 15. Dans les mois entre les deux versions, V8 a débarqué plusieurs nouvelles fonctionnalités parallèlement à des améliorations de performances significatives.
L’une de ces améliorations consiste en des appels plus rapides aux fonctions avec une longueur de liste d’arguments incompatible. JavaScript vous permet de passer un nombre différent d’arguments à la signature de la fonction:
function demo(a, b, c) { // ... } // OK demo(1); // Also OK demo(1, 2, 3, 4);
La première variante est couramment utilisée lorsqu’un paramètre est facultatif. Cette dernière variante se produit parfois lorsqu’une fonction est refactorisée pour supprimer un argument. Ce type de code entraînait une pénalité de performance avant V8 8.7. Le remaniement des éléments internes utilisés pour gérer les longueurs de liste d’arguments incompatibles a pratiquement éliminé la surcharge.
Une autre amélioration des performances concerne le super
propriété. Cette fonctionnalité JavaScript vous permet d’accéder au parent d’une classe qui utilise l’héritage. Appels à super
utilisé pour être non optimisé, encourant un appel d’exécution à chaque utilisation. V8 v9 a expédié les modifications activant super
accès à la propriété pour exécuter des ordres de grandeur plus rapidement. Cette optimisation est désormais disponible pour les utilisateurs de Node.js.
Enfin, V8 v9 est livré avec une nouvelle fonctionnalité importante pour les expressions régulières. Vous pouvez maintenant demander un tableau contenant les positions de début et de fin de chaque groupe de capture correspondant. Ceci est activé en utilisant le /d
drapeau avec RegExp
. Vous pouvez ensuite accéder au tableau des indices via le indices
propriété de l’objet de résultat d’exécution.
const regex = /(a)(b)/d; const match = regex.exec("xy"); console.log(match.indices[0]); // [0, 2] console.log(match.indices[1]); // [0, 1] console.log(match.indices[2]); // [1, 2]
Le premier élément du tableau représente la correspondance entière. Les éléments suivants vous donnent les positions de chaque groupe de capture correspondant dans la chaîne d’entrée.
npm v7
Node.js v16 introduira npm v7 sur le canal LTS. npm a subi une refactorisation interne substantielle pour améliorer les performances et refondre le flux de travail des dépendances homologues.
Les dépendances homologues sont désormais installées automatiquement aux côtés des dépendances régulières. Il peut s’agir d’un changement radical dans certains flux de travail, bien que les perturbations soient «généralement minimes».
Il existe également un nouveau format pour package-lock.json
ce qui permet des constructions déterministes plus fiables. Il comprend désormais tout npm doit reconstruire votre arborescence de paquets à partir de zéro. Si vous migrez depuis Yarn, npm est désormais pris en charge pour yarn.lock
fichiers aussi.
Autres changements notables
La v16 promeut l’API Timers Promises à un statut stable. Cette API fournit des fonctions de minuterie JavaScript qui renvoient des promesses natives. Des fonctions telles que setTimeout()
acceptent généralement un rappel. Cela peut être compliqué lorsqu’il est utilisé avec du code asynchrone moderne.
// Old function demoOld() { setTimeout(() => { console.log("Timer expired."); }, 5000); } // New import {setTimeout} from "timers/promises"; async function demoNew() { await setTimeout(5000); console.log("Timer expired."); }
L’utilisation de promesses rend le code plus lisible lorsqu’il est combiné avec async
/await
. Attendre une minuterie ressemble à un traditionnel sleep
appel dans une langue synchrone.
Node.js a également ajouté un support expérimental pour l’API Web Crypto. Cette spécification W3C a pour but de donner aux applications Web un accès à un ensemble élémentaire de fonctions cryptographiques. L’API propose une génération de hachage et une vérification de signature ainsi que des utilitaires de cryptage et de décryptage.
La prise en charge de Web Crypto dans Node.js améliore l’interopérabilité entre JavaScript sur les serveurs et JavaScript dans les navigateurs Web. L’implémentation Node étend divers aspects de la spécification W3C et inclut ses propres variations de certains objets.
Silicium d’Apple
Un changement complètement nouveau dans la v16 est la publication de builds pour les processeurs Apple Silicon. Cela devrait améliorer les performances sur le nouveau matériel Mac. Node.js fonctionnera nativement sur l’Apple M1, au lieu d’utiliser la couche d’émulation Rosetta.
Les utilisateurs installant via le mécanisme de distribution tarball devront choisir entre darwin-x64
(Intel) ou darwin-amd64
(Apple Silicon) packages. Si vous utilisez l’utilitaire d’installation de macOS, un seul téléchargement avec prise en charge des deux architectures est fourni.
Dépréciations
Étant une version majeure, la v16 est livrée avec quelques dépréciations et suppressions. Vous pouvez trouver la liste complète dans le changelog complet.
L’intention de supprimer l’accès à plusieurs modules principaux via process.binding()
. Cet appel fournit un mécanisme pour accéder aux objets C ++ sous-jacents derrière l’implémentation Javacript des modules. Fixations pour modules comprenant crypto
, v8
, async_wrap
et url
ont été obsolètes et pourraient être supprimées à l’avenir.
Ailleurs, le recursive
option à la fs.rmdir()
La fonction de suppression de répertoire est obsolète. Le nouveau code devrait utiliser l’alternative fs.rm(path, {recursive: true})
fonction à la place. Cette modification a été apportée pour mieux aligner Node.js avec le rmdir
Commande Unix et rmdir()
-fonctions équivalentes dans d’autres langages de programmation.
Résumé
Node.js v16 est une nouvelle version majeure qui apportera plusieurs nouvelles fonctionnalités au canal LTS tout en déployant les dernières fonctionnalités JavaScript V8. Cela vient avec npm v7 et le lancement des versions natives d’Apple Silicon.
Vous pouvez obtenir la nouvelle version via le canal actuel en suivant les documents d’installation sur le site Web Node.js. La v16 remplacera la v14 en tant que version LTS le 26 octobre 2021.
La version actuelle de Node.js v15 restera prise en charge jusqu’au 1er juin 2021. Les utilisateurs doivent chercher à passer à la v16 dès que possible. La branche LTS actuellement active, v14, sera maintenue jusqu’à la fin du mois d’avril 2023.