Node.js est un framework de longue date qui permet d’écrire du code côté serveur en JavaScript. Publié à l’origine en 2009, ce framework a connu une croissance considérable et une explosion de son utilisation au cours des dernières années.
Deno a des différences dans le style de formatage, la syntaxe d’importation et la gestion des paquets, mais le même ingénieur a construit ces frameworks concurrents sur le même moteur.
Aujourd’hui, Deno existe depuis suffisamment longtemps pour se faire une place dans la pile de travail de nombreux développeurs. Si vous cherchez à démarrer un nouveau projet JavaScript, vous pouvez vous demander quel est le bon choix.
Caractéristiques de Node et Deno
Près de neuf ans après la sortie de Node, son développeur, Ryan Dahl, a annoncé un nouveau projet : Deno. Alors que Node était autrefois la seule option pour le JavaScript côté serveur, Deno nous offre une alternative.
Node.js et Deno sont assez similaires à bien des égards. La majorité des différences entre les deux se trouvent sous le capot. Alors que Node s’appuie sur le moteur JavaScript V8, Deno s’appuie sur un moteur personnalisé construit en Rust et axé sur les performances.
La plupart des différences majeures entre les deux langages sont basées sur les fonctionnalités qu’ils prennent en charge. Les modules, le linting, le typage et la gestion des paquets sont tous gérés de manière très différente entre les deux.
Importations de modules : CommonJS vs. ES
Node.js utilise par défaut les modules CommonJS avec la syntaxe require(). Node vous permet de changer cela en modifiant vos fichiers de configuration pour utiliser les modules ECMAScript avec la syntaxe import() à la place si vous le souhaitez.
// This Is A Valid CommonJS Module Import In Node.js
var _ = require("lodash");
// This Is A Valid ECMAScript Module Import In Node.js
import _ from 'lodash';
Il existe une interopérabilité limitée entre les deux types de chargement de modules ES, certains modules ECMAScript pouvant être inclus à l’aide de la syntaxe require(). Chaque type d’importation gère les modules de manière légèrement différente, mais l’un ou l’autre fonctionnera dans la majorité des cas.
Cela vous permet de choisir votre méthodologie préférée pour inclure des modules externes lors de la création d’un projet.
Deno adopte une approche différente lorsqu’il s’agit d’inclure des modules externes dans un projet. Deno utilise la syntaxe include() pour tous les modules, cependant, contrairement à l’import de Node, les modules importés dans Deno peuvent provenir de n’importe quel endroit. Ces emplacements peuvent même inclure des réseaux de diffusion de contenu (CDN).
// This Is A Valid Import Statement In Deno
import "https://deno.land/x/lodash@4.17.19/dist/lodash.js";
Cela vous permet d’importer des dépendances à partir de n’importe quel emplacement, local ou distant, offrant ainsi une plus grande flexibilité. Si vous préférez travailler avec la syntaxe traditionnelle require de Node.js, vous pouvez écrire votre propre fonction polyfill require dans Deno comme solution de contournement.
Support du code TypeScript
TypeScript a vu sa popularité croître au cours des dernières années, et rien ne laisse présager un ralentissement prochain. L’introduction d’une dynamique de code à sécurité de type dans JavaScript s’est avérée être une entreprise extrêmement fructueuse.
Aujourd’hui, la mise en place d’un nouveau projet TypeScript ou la conversion d’un projet Node.js existant en TypeScript est simple, même si elle prend un peu de temps.
L’ajout du support TypeScript est devenu suffisamment populaire pour que la plupart des frameworks modernes disposent désormais d’une forme de support TypeScript. Angular a ouvert la voie, avec un support TypeScript prêt à l’emploi. Aujourd’hui, même React dispose de méthodes pour configurer la prise en charge de TypeScript.
Deno a été conçu avec le support de TypeScript afin d’améliorer votre productivité. Avec le support TypeScript prêt à l’emploi, Deno n’a même pas besoin de l’installation minimale requise par Node.js pour commencer à développer du code JavaScript typé.
Si vous aimez TypeScript, vous pouvez démarrer rapidement et facilement grâce au support de Deno, mais il vous manquera peut-être certaines des bibliothèques standard de Node.js. Bien que Deno offre une installation plus rapide, l’absence d’un écosystème développé peut vous gêner dans votre processus de construction.
Linting pour générer un code plus propre
Node.js dispose d’une grande variété de linters parmi lesquels vous pouvez choisir. Il existe de nombreuses options bien développées que vous pouvez rapidement et facilement installer et configurer. Comme dans le cas de TypeScript, cependant, vous devrez faire un peu de travail pour démarrer avec le linter de votre choix.
Deno a pris un chemin légèrement différent dans le formatage de code, en venant avec sa propre solution de linting intégrée pour les fichiers .js, .ts, et .md. L’exécution de la commande « deno fmt » formatera automatiquement tous les fichiers dans le répertoire de travail courant.
Si vous n’êtes pas fan du linter par défaut, il est possible d’installer et d’exécuter le système de formatage de votre choix, comme vous le feriez avec Node. Le changement de système est simple car le linter de Deno s’exécute via une commande externe et ne fait pas partie du pipeline de construction par défaut.
Si vous envisagez de remplacer le linter de Deno par un nouveau système, vous devez être conscient des problèmes de compatibilité potentiels et les garder à l’esprit. La plupart des linters JavaScript nécessitent une installation de Node pour fonctionner, même si ce n’est pas le système sur lequel tourne le projet à formater.
Gestion des paquets
Le gestionnaire de paquets Node (npm) est très connu des développeurs modernes. S’appuyant sur le succès de systèmes similaires comme Pip de Python et RubyGems de Ruby, npm a rapidement gagné en popularité.
Des préoccupations persistantes ont conduit au développement de gestionnaires concurrents, tels que pNPm et Yarn. Dans certaines situations, vous pouvez même choisir d’installer et d’utiliser plusieurs gestionnaires de paquets avec Node.
Aujourd’hui, si vous choisissez de développer en Node.js, vous avez l’embarras du choix en matière de gestion de paquets. Node s’enorgueillit d’un écosystème florissant avec de nombreuses options pour les paquets à installer. Il y en a actuellement plus de 1,3 million dans le registre principal npm.
Npm vous permet de publier vos propres paquets, ce qui donne lieu à une bibliothèque d’une ampleur stupéfiante.
Deno a adopté une approche totalement différente de la gestion des paquets. Il n’a pas de système de gestion des paquets, et n’en a pas besoin. Au lieu de cela, Deno permet l’importation directe de bibliothèques externes, non seulement à partir du système du développeur, mais aussi à partir de n’importe quel endroit qui accepte les requêtes HTTP.
Cela vous permet d’importer des bibliothèques à partir du dépôt de Deno, ou de n’importe quel CDN en ligne, directement à partir de leur base de code.
Le registre officiel des paquets de Deno n’est pas aussi développé que celui de Node, en raison de l’avance de Node de près de neuf ans. La possibilité d’importer des bibliothèques de n’importe où vous évite de subir les conséquences d’un écosystème qui n’a pas encore eu l’occasion de se développer pleinement.
L’implication de la communauté dans Node et Deno
Publié à l’origine en 2009 par Ryan Dahl, Node a eu largement le temps d’impliquer la communauté des développeurs. Avec un grand nombre d’utilisateurs précoces et une importante bibliothèque de paquets stockés dans son dépôt officiel et à votre disposition, le public a eu son mot à dire dans la croissance de Node.js.
La plateforme elle-même est entièrement open-source, maintenue par la fondation OpenJS et de nombreux contributeurs.
Deno est sorti en 2018, près de 9 ans après Node. Il a été principalement développé par Ryan Dahl pour répondre aux préoccupations et aux regrets qu’il avait avec son implémentation de Node. Aujourd’hui, Deno est également open source sous la licence MIT.
Avec de nombreux contributeurs et un référentiel en pleine expansion, Deno a suscité beaucoup d’intérêt de la part de la communauté.
Les performances des deux frameworks
Pour les codeurs intéressés par les différences de performances relatives entre les deux frameworks, il y a peu de différence entre les deux. Le moteur personnalisé de Deno, écrit en Rust, recouvre un cadre de base qui est toujours le moteur V8. En fin de compte, Deno et Node sont comparables dans presque tous les cas en termes de performances.
Cela semble être le cas, que le code résultant s’exécute sur le serveur ou sur le client. Les performances n’entrant pas en ligne de compte dans la décision, vous êtes libre de choisir le framework avec lequel vous vous sentez le plus à l’aise.
Ryan Dahl, le créateur des deux frameworks, a évoqué diverses raisons pour expliquer la création de Deno. Bien qu’il ait mentionné plusieurs facteurs, allant de l’incapacité à incorporer correctement les promesses dans de nombreuses API à son système de construction choisi, la performance n’a pas fait partie du processus.
Node vs Deno : Quel est le bon choix ?
Sous le capot, Node.js et Deno sont des frameworks remarquablement similaires. Tous deux exécutent JavaScript à l’aide du moteur V8 avec des performances et des capacités similaires. Bien qu’il y ait quelques différences au niveau de la syntaxe, de la gestion des paquets et du support intégré, le choix de l’un ou l’autre est largement basé sur vos préférences.
Node s’enorgueillit d’un écosystème incroyablement large, mais Deno vous permet de tirer vos dépendances de n’importe quelle source. En fin de compte, vous devrez examiner de près votre propre style de développement et déterminer quelle plateforme vous convient le mieux.
