Quelles nouveautés pouvez-vous attendre de Node.js en 2020?

Node.js a eu 10 ans en 2019. Le nombre de packages disponibles dans le registre npm a franchi la barre du million. Chaque année, le volume de téléchargement de la plateforme Node.js elle-même augmente de 40%. Une autre étape importante pour Node.js a été que ce projet a rejoint la Fondation OpenJS. Grâce à cela, nous pouvons espérer une amélioration du statut et de la stabilité du projet, ainsi que, d'une manière générale, des développements positifs dans le domaine de l'interaction entre les membres de la communauté JavaScript.



Il est facile de voir que dans un court laps de temps, plus d'un an, beaucoup de choses intéressantes se sont produites dans le monde de Node.js. Chaque année, Node.js prend de l'ampleur. Nous n'avons aucune raison de compter sur autre chose en 2020.

Dans les prochaines versions de Node.js, nous trouverons de nombreuses fonctionnalités intéressantes. Ce matériel est dédié aux innovations les plus significatives de la plateforme qui pourraient y apparaître en 2020.

Innovations Node.js 13


Début décembre 2019, au moment de la rédaction de ce document, Node.js 13 est la dernière version de cette plateforme. Il existe déjà de nombreuses nouvelles fonctionnalités et améliorations avec lesquelles vous pouvez commencer à expérimenter, en vous préparant pour la nouvelle année. En voici quelques uns:

  • Modules ECMAScript.
  • Prise en charge de WebAssembly.
  • Rapports de diagnostic.
  • Prise en charge complète de l'internationalisation. En particulier, nous parlons des formats de date, heure, nombres, devises.
  • Prise en charge du protocole QUIC.
  • Amélioration des performances du moteur JavaScript V8.

Avant d'entrer dans les détails de ces fonctionnalités, nous parlerons de ce qui peut être attendu dans les domaines de la sortie de nouvelles versions de Node.js et de la prise en charge des versions déjà publiées de la plate-forme.

Le processus de publication de nouvelles versions de Node.js en 2020


Une nouvelle version majeure de Node.js est publiée tous les 6 mois. L'un en octobre, l'autre en avril. Ils sont appelés "versions actuelles". Au moment d'écrire ces lignes, la version actuelle de Node.js est la 13e, publiée en octobre 2019.

Des versions avec des nombres impairs (v9, v11, v13) sont publiées en octobre. Ils sont pertinents pour un temps relativement court, ils ne sont pas considérés comme prêts à l'emploi en production. Ils peuvent être considérés comme des versions bêta de la plateforme. Ils sont conçus pour tester de nouvelles fonctionnalités et modifications qui tomberont dans la prochaine version de Node.js avec un nombre pair.

Des versions avec des nombres pairs (v8, v10, v12) sont publiées en avril. Après la publication d'une telle version, la publication des mises à jour de la version "paire" précédente s'arrête. Bien que ces versions soient beaucoup plus stables que les "bizarres", leur travail actif se poursuit pendant encore 6 mois. À l'heure actuelle, ils peuvent être considérés comme étant dans un état candidat à la libération.

Une fois la version «pair» finalisée dans les 6 mois, elle entre dans une nouvelle étape de son cycle de vie, devenant la version LTS (Long-Term Support, long-term support). Les versions LTS de Node.js sont considérées comme prêtes à l'emploi en production. Au cours des 12 prochains mois, des corrections de bogues, des mises à jour de sécurité et d'autres améliorations seront publiées pour ces versions. Tout cela se fait en tenant compte de la préservation de l'opérabilité des applications existantes.

Après l'étape LTS, l'étape Maintenance commence. Seules les corrections de bugs critiques et les mises à jour de sécurité sont publiées pour le moment. L'étape d'escorte dure 18 mois. Passé ce délai, la version correspondante passe à l'étape de fin de cycle de vie (EOL, End-of-Life) et n'est plus prise en charge.


Cycle de vie de la version de Node.js

Le plan de sortie prévu pour les nouvelles versions de Node.js en 2020


En 2020, nous pouvons nous attendre au plan suivant pour la sortie de nouvelles versions de Node.js:

Janvier-mars 2020

  • La version actuelle est 13.x, un travail actif y est en cours.
  • Les versions 10.x et 12.x sont à l'état LTS.

Avril 2020

  • La version 14.x devient actuelle.
  • Le travail sur la version 13.x s'arrête peu de temps après la sortie de 14.x.
  • La version 10.x entre dans la phase de maintenance.

Octobre 2020

  • La version 15.x est publiée, qui devient actuelle.
  • La version 14.x entre dans la phase LTS.
  • La version 12.x entre dans la phase de maintenance.


Prévoyez la sortie de nouvelles versions de Node.js en 2020

Veuillez noter que la fin du cycle de vie de Node.js 8 est prévue pour la fin de 2019. Le fait est que cette version de la plateforme dépend d'OpenSSL-1.0.2, et le cycle de vie de cette version d'OpenSSL se termine également fin 2019. Prévoyez de traduire les applications Node.js 8.x en Node.js 10.x ou 12.x si vous ne l'avez pas déjà fait.

Modules ECMAScript


Dans la version 13.2.0, Node.js prend en charge à la fois les modules CommonJS et les nouveaux modules ECMAScript standard (modules ES) sans avoir besoin d'outils tiers. Cela signifie que les développeurs peuvent enfin utiliser les instructions d' import et d' export , les mêmes qu'elles utilisent probablement déjà lors de la création de projets frontaux en JavaScript. De plus, il est important de noter que les modules ES dans Node.js fonctionnent en mode strict par défaut. Par conséquent, pour activer ce mode, vous n'avez pas besoin d'ajouter "use strict"; au début de chaque fichier "use strict"; .

 //  message async function sendMessage { ... } export { sendMessage }; //  index import { sendMessage } from "./message"; 

Cependant, afin d'informer Node.js que le développeur utilise des modules ES, quelque chose doit être fait. Ici, vous pouvez utiliser l'une des deux méthodes les plus couramment utilisées. Le premier d'entre eux est que les fichiers se voient attribuer l'extension .mjs . La seconde est que le fichier parent le plus proche package.json place la construction "type": "module" .

Tout est clair avec la première approche - les fichiers .js sont renommés en fichiers .mjs . Lorsque vous utilisez la deuxième approche, dans le fichier racine package.json ou dans package.json , placé dans le dossier contenant les modules ES, ajoutez la propriété type avec le module valeur:

 {   "type": "module" } 

Une autre possibilité concernant l'utilisation des modules ES est de les inclure dans le fichier racine du projet package.json et de changer les extensions de fichier à l'aide des modules CommonJS en .cjs .

Personnellement, il me semble que l'utilisation des .cjs .mjs ou .cjs n'est pas une bonne idée. Par conséquent, je suis heureux de voir que pour travailler avec des modules ES, il suffit de modifier le fichier package.json .

Importer des modules WebAssembly


Node.js prend désormais en charge non seulement les modules ES, mais également l'importation de modules WebAssembly (modules Wasm). Un module wasm est un fichier qui contient du code dans un format binaire portable, qui peut être analysé plus rapidement qu'un code JavaScript similaire et exécuté à une vitesse similaire à celle native. Les modules Wasm peuvent être créés en développant du code source dans des langages tels que C / C ++, Go, C #, Java, Python, Elixir, Rust et bien d'autres.

La prise en charge des modules WebAssembly est encore en phase expérimentale. Afin d'activer cette fonctionnalité, vous devez transmettre à Node.js un indicateur de ligne de commande spécial lors du démarrage de l'application:

 node --experimental-wasm-modules index.js 

Prenons un exemple. Supposons que nous ayons une bibliothèque de traitement d'image implémentée en tant que module Wasm. Pour travailler avec une telle bibliothèque en code JS, vous pouvez faire ceci:

 import * as imageUtils from "./imageUtils.wasm"; import * as fs from "fs"; ( async () => {   const image = await fs.promises.readFile( "./image.png" );   const updatedImage = await imageUtils.rotate90degrees( image ); } )(); 

Ici, nous avons importé le module et utilisé la fonction qui y est disponible.

Les modules Wasm dans Node.js peuvent être importés à l'aide de la nouvelle instruction dynamic import() :

 "use strict"; const fs = require("fs"); ( async () => {   const imageUtils = await import( "./imageUtils.wasm" );   const image = await fs.promises.readFile( "./image.png" );   const updatedImage = await imageUtils.rotate90degrees( image ); } )(); 

Interface du système WebAssembly


La technologie WebAssembly, comme JavaScript, a été développée dans un souci de sécurité. Le code Wasm s'exécute dans un environnement sécurisé, parfois appelé sandbox. Cela vous permet de protéger le système d'exploitation dans lequel il s'exécute à partir de ce code. Cependant, dans certains cas, les modules Wasm s'exécutant dans l'environnement Node.js ne peuvent bénéficier que de la possibilité d'effectuer des appels système.

C'est là que l'interface système WebAssembly (interface système WebAssembly, WASI) entre en scène. WASI est conçu comme une interface standard pour accéder aux systèmes qui exécutent le code Wasm. Ces systèmes peuvent inclure des applications hôtes, des systèmes d'exploitation, etc.

Vous pouvez trouver une validation récente dans le référentiel Node.js introduisant la prise en charge initiale de WASI. En fait, l'interface du système WebAssembly est l'une des fonctionnalités intéressantes de Node.js, dont l'apparition est attendue en 2020.

Prise en charge des rapports de diagnostic


Les rapports de diagnostic sont des documents JSON destinés aux personnes qui contiennent des informations sur le fonctionnement des mécanismes logiciels. Ces informations peuvent inclure des piles d'appels de fonctions, des informations sur le système d'exploitation, des données sur les modules chargés et d'autres indicateurs utiles destinés à aider à prendre en charge les applications. Des rapports similaires peuvent être créés lorsque des exceptions non gérées, des erreurs critiques se produisent. Ils peuvent être générés par des signaux provenant de processus ou en utilisant la nouvelle API process.report . Node.js peut être configuré pour que les rapports de diagnostic soient enregistrés dans le dossier spécifié en utilisant les noms de fichiers spécifiés.

Cette fonctionnalité est maintenant expérimentale. Pour l'activer, vous devez transmettre à Node.js un indicateur spécial lors du démarrage de l'application:

 node --experimental-report --report-uncaught-exception --report-filename=./diagnostics.json index.js 

Extension de la prise en charge de l'internationalisation


Node.js 13.x inclut la version complète de la bibliothèque ICU ( International Components for Unicode ). ICU est un projet populaire mature. Parmi les nombreuses fonctionnalités de cette bibliothèque, la prise en charge de la mise en forme des nombres, des dates, des devises et de l'heure dans un format localisé peut être notée. Elle est capable d'effectuer des calculs liés aux intervalles de temps, est capable de comparer des chaînes et transcoder des textes d'Unicode à d'autres encodages et vice versa.

Quelques autres nouvelles fonctionnalités de Node.js


Voici quelques fonctionnalités plus intéressantes de Node.js, dont l'apparition est attendue en 2020:

  • Prise en charge du protocole QUIC. QUIC est un protocole Internet moderne avec lequel vous pouvez établir des communications fiables et productives entre les applications.
  • Prise en charge améliorée de Python 3. En 2020, nous devrions être en mesure de créer des modules Node.js et des modules natifs à l'aide de Python 3.
  • Une version mise à jour du moteur JS V8. Les versions 7.8 et 7.9 du moteur V8 offriront des performances d'application accrues et une prise en charge de Wasm.
  • Fils de travail API stables. L'API Worker Threads vous permet de paralléliser l'informatique intensive.

Chers lecteurs! Qu'attendez-vous le plus de la plateforme Node.js en 2020?


Source: https://habr.com/ru/post/fr479270/


All Articles