Le rival de Node.js, Deno, ajoute une compatibilité npm stable dans le but de combler la division du système de modules • DEVCLASS

L’équipe Deno a publié la version 1.28 qui “stabilise la compatibilité npm”, selon un article publié aujourd’hui.

Il s’agit d’une fonctionnalité clé car le registre npm (Node Package Manager) est extrêmement populaire. Lorsque GitHub de Microsoft a acquis le registre npm, il réclamait 1,3 million de packages et 125 milliards de requêtes par mois, des chiffres qui devraient être beaucoup plus élevés maintenant, bien que npm ne publie plus de statistiques.

Le fonctionnement des packages npm avec Deno est décrit ici. Il existe deux approches, dont la technique préférée est celle des spécificateurs npm. Dans ce cas, les modules npm sont importés directement dans le code Deno. Aucun répertoire node_modules n’est requis. Node.js lui-même utilise un répertoire node_modules dans la source de l’application. L’équipe avoue cependant que “même si cette fonctionnalité a été stabilisée pour être utilisée avec deno run et d’autres sous-commandes dans Deno 1.28, elle est toujours en cours de développement et ne fonctionne pas dans certains scénarios (par exemple avec deno bundle).”

L’autre approche, plus ancienne, consiste à utiliser un CDN (Content Delivery Network) qui encapsule ou modifie les packages npm pour qu’ils fonctionnent avec Deno. Le principal problème est que le code écrit pour Node.js utilise le plus souvent le système de module CommonJS, tandis que Deno utilise le système de module EcmaScript (ESM). ESM prend en charge le navigateur natif et est donc préférable, mais l’utilisation généralisée de CommonJS, qui était disponible avant la standardisation d’ESM, le rend difficile à éviter.

La prise en charge de npm par Deno est fournie via un ajout à la bibliothèque standard Deno, std/node, qui fournit une couche de compatibilité pour les modules intégrés de Node et un mécanisme de chargement des modules CommonJS.

L’équipe Deno est défensive quant à son support npm. « Deno soutient que le JavaScript moderne devrait être construit avec des modules ES et des API Web standard. Cette version ne change rien à cela », indique le post à ce sujet. Comme si souvent, la compatibilité compte plus que la pureté. “Deno fait avancer npm en vous permettant d’accéder à vos modules préférés dans un environnement de programmation moderne et sécurisé”, ajoute le message.

Il peut y avoir une certaine pression de la part du nouveau rival Bun, toujours en avant-première, qui a fait de la compatibilité Node.js un objectif dès le départ et qui affiche de meilleures performances que Deno ou Node.js. DevClass a interrogé le PDG de Netlify, Matt Biilmann, sur Bun versus Deno – en gardant à l’esprit que Netlify a adopté Deno pour ses fonctions Edge plus tôt cette année.

“Bun tombe dans la même catégorie [as Deno] et c’est super intéressant », nous a-t-il dit. «L’histoire de la performance là-bas, j’aurais quelques mises en garde. Il est toujours plus facile d’être plus rapide lorsque vous ne faites pas tout », faisant référence au fait que Bun n’est pas encore complet.

“L’une des grandes questions concernera la compatibilité de Node.js par rapport à la tentative de Deno de se recentrer sur l’API Web”, a déclaré Biilmann. Le dilemme est qu ‘«il y a tellement d’investissements dans l’ensemble de l’écosystème Node.js et dans toutes les bibliothèques et outils qui l’entourent… il y a beaucoup d’inertie là-bas.» Cela dit, “il est également vrai que vous obtenez un modèle mental plus simple, plus l’environnement du navigateur et l’environnement du serveur se rapprochent l’un de l’autre… c’est une autre raison pour laquelle nous avons opté pour Deno pour nos runtimes Edge. Mais même dans ce cas, ils ont dû introduire une couche d’adaptation entre l’écosystème npm et l’écosystème Deno, uniquement à partir de la demande du marché.

C’est donc cet adaptateur qui, en théorie, peut donner aux développeurs Deno le meilleur des deux mondes. Là encore, l’équipe Node.js travaille également là-dessus dans la direction opposée, en ajoutant la compatibilité ESM, et reste dominante dans l’utilisation globale.

Leave a Comment

Your email address will not be published. Required fields are marked *