
contactez nous


Je ne sais pas si vous êtes au courant de l'actualité, mais Deno est la nouvelle star du Écosystème Javascript - certains disent même que ça va tuer Node. Maintenant que Deno est sorti, il est temps de savoir s'il peut s'agir d'une compétition digne de ce nom pour Node. Curieux ? Commençons !
Dans cet article, nous examinerons Comparatif entre Deno et Node et comparez-les pour mieux comprendre ce qu'ils ont en commun et ce qui les distingue en termes de :
J'espère que nous pourrons vous aider à avoir une idée claire de ce qui vous convient le mieux.
À Imaginary Cloud, nous utilisons Node pour créer des API, servir des frontends et créer des architectures de microservices, entre autres.
Node est un environnement JavaScript côté serveur basé sur le moteur JavaScript V8 de Google, créé par Ryan Dahl en 2009 et fortement axé sur les serveurs HTTP pilotés par les événements. Cela a généralisé le JavaScript côté serveur et c'est ce JavaScript partout paradigme qui a permis le développement d'applications Web en utilisant un seul langage de programmation.
En 2018, Ryan Dahl a donné une conférence à JSConf EU intitulée Erreurs de conception dans Node - également connu sous le nom de « 10 choses que je regrette à propos de Node.js ». Dans son exposé, il détaille ses regrets concernant certains choix qui ont été faits lors du développement de Node. Comme il le souligne, au moment où Node a commencé à être développé, JavaScript était un langage très différent et il ne possédait pas certaines des fonctionnalités les plus modernes :
Étant donné que de nombreux défauts de conception mentionnés lors de la conférence ne pouvaient être corrigés sans réécrire le cœur de Node et mettre ainsi fin à la prise en charge des applications existantes, Ryan a décidé de présenter Deno.
Tout d'abord, il ne s'agit pas d'un fork de Node, mais d'une nouvelle implémentation basée sur les fonctionnalités modernes du langage JavaScript, bien que son nom soit une anagramme de Node. Deno est un environnement d'exécution sécurisé pour JavaScript et TypeScript basé sur la V8 de Google et son cœur est construit en Rust (l'implémentation de Node est en C++). Il utilise Tokio pour sa boucle d'événements, qui est également écrite en Rust.
Pour les autres méthodes d'installation, consultez documentation officielle.
(Au moment où j'écris ces lignes, la version Déno disponible est 1,46,3).
Deno est livré sous la forme d'un exécutable unique sans dépendances et est livré avec des outils intégrés pour faciliter l'expérience des développeurs :
Tous ces outils sont standardisés pour Deno, vous êtes donc sûr qu'ils bénéficieront d'un support complet.
En tant qu'exécutable unique, Deno peut se mettre à jour via : mise à niveau de la démonstration
ou deno upgrade --version <new_version>
.
Cela récupérera la version spécifiée (ou la dernière si elle n'est pas spécifiée) et remplacera votre exécutable actuel par celle-ci.
Il est possible d'installer plusieurs versions, en utilisant gestionnaires de versions.
Pour Node, les gestionnaires de versions sont également responsables de la mise à jour/de l'installation de nouvelles versions, par ex. nvm
.
Deno est basé sur TypeScript, il le prend donc en charge immédiatement sans avoir à installer ou à configurer des outils, comme l'ajout d'un tsconfig.json
fichier de configuration dans Node. Bien qu'il soit livré avec un fichier de configuration par défaut, il est possible d'ajouter le vôtre deno run -c tsconfig.json [fichier-à-exécuter.ts]
.
Comme TypeScript n'est qu'un sur-ensemble de JavaScript, Deno peut également l'exécuter.
Pour exécuter un script, vous pouvez créer bonjour-monde.ts
fichier contenant l'extrait ci-dessus et exécutez-le en exécutant : deno run hello-world.ts
. Cela utilisera le compilateur TypeScript de Microsoft pour vérifier les types et produire du JavaScript, puis exécuter le script.
À l'heure actuelle, l'équipe de Deno suppose que le temps nécessaire à la V8 pour analyser TypeScript par rapport à JavaScript est beaucoup plus long et que c'est un processus continu tâche pour porter le compilateur TypeScript vers Rust.
L'un des principaux objectifs est la sécurité. Deno est sécurisé par défaut et le code est exécuté dans un sandbox sécurisé, reproduisant le même modèle d'autorisation que celui implémenté par le navigateur. Sauf indication contraire, il n'a pas accès au système de fichiers, au réseau ou aux variables d'environnement, et le autorisations d'accès doivent être explicitement transmis au processus Deno sur la ligne de commande.
Si vous essayez d'exécuter l'extrait précédent :
Pour éviter cette erreur, vous devez ajouter --autoriser-env
drapeau pour pouvoir accéder aux variables environnementales :
Il existe une option pour autoriser tous les accès --autoriser tout
ou -UNE
, mais cela n'est pas recommandé.
À l'inverse, Node est très permissif, vous avez un accès complet à presque tout :
Deno utilise les modules ES, le format standard officiel pour empaqueter le code JavaScript, introduit dans ES6/ES2015 :
Lorsque Node a été créé, JavaScript ne possédait pas son propre système de modules, il utilisait donc le standard commonJS :
À l'heure actuelle, Node n'a que soutien expérimental pour les modules ES et vous devez effectuer quelques configurations/modifications sur les fichiers existants.
Je n'entrerai pas dans les détails des différences, mais si vous souhaitez examiner en profondeur les deux systèmes de modules, je vous recommande de lire ce.
Bien qu'il ne soit pas compatible, en général, avec les packages Node, Deno fournit une bibliothèque de compatibilité des nœuds, qui nous permettra d'utiliser certains packages NPM qui n'utilisent pas d'API Node non polyremplies.
L'un des principaux avantages est qu'il utilise un protocole standard compatible avec les navigateurs pour le chargement des modules, vous permettant d'importer des modules directement via des URL, ce qui a un impact énorme sur la façon dont nous gérons les modules.
Étant donné que Deno utilise des URL pour charger les modules, il joue explicitement le rôle à la fois d'exécution et de gestionnaire de packages. Il ne dépend pas d'un serveur centralisé pour la distribution des modules. Cela signifie qu'il nécessite des noms de modules complets, y compris l'extension (ou un serveur fournissant le type de support approprié).
Vous pouvez importer des modules directement et utiliser les dépendances sous forme de code :
Pour exécuter l'extrait précédent, vous pouvez simplement exécuter : deno run --allow-net http-server.ts
. Il n'y a aucune installation à effectuer au préalable car Deno télécharge et met en cache un module dans un répertoire global la première fois que son URL est rencontrée dans un script. Le cache des modules a deux objectifs principaux :
—recharger
indicateur si vous souhaitez réinitialiser manuellement le cache.
Tous les modules et fichiers chargés à partir d'URL distantes, en plus d'être cachables, sont également destinés à être immuables.
Comme vous l'avez probablement remarqué, les importations nécessitent des noms de modules complets, y compris l'extension. De plus, Deno n'a pas de résolution de module « magique ». Au lieu de cela, les modules importés sont spécifiés sous forme de fichiers (y compris les extensions) ou d'importations d'URL complètes.
Utilisations des nœuds npm
en tant que gestionnaire de packages pour installer et gérer les packages tiers répertoriés dans registre npm. Cela rend les liens vers des bibliothèques externes fondamentalement centralisés via le registre npm. Lorsque vous installez un package dans votre projet avec NPM/Yarn, un package.json
Le fichier est utilisé pour spécifier le nom du package et les versions acceptées, et les packages sont téléchargés dans un dossier node_modules de votre projet. En conséquence, node_modules
les dossiers deviennent énormes, car les modules nécessitent des versions spécifiques d'autres modules, et ils seront répliqués dans chaque répertoire de projet dont ils ont besoin.
Deno n'utilise pas NPM pour la gestion des dépendances, donc nonpackage.json
et nonnode_modules
Deno fournit des modules standard d'aides et d'utilitaires pour les tâches courantes qui sont audités par l'équipe Deno Core.
Ces modules seront étiquetés conformément aux versions de Déno. Le fait de ne pas spécifier de balise créera automatiquement un lien vers la branche master. Il est donc recommandé de créer un lien vers les versions balisées pour éviter les mises à jour involontaires et les modifications majeures.
Si vous souhaitez verrouiller une version spécifique du module, vous pouvez utiliser un verrouiller.json
fichier, pour vérifier intégrité du module.
Deno fournit un intégrité du service d'hébergement pour les scripts de démonstration. Il met en cache les versions des modules open source stockées sur GitHub et les diffuse dans un domaine facile à mémoriser.
Par exemple, si vous recherchez un utilitaire de date, vous pouvez utiliser le https://deno.land/x fonction de recherche qui vous aide à trouver des modules. Une fois que vous avez trouvé le module que vous souhaitez, dans ce cas, date-fns, vous pouvez simplement importer l'URL correcte dans le fichier dans lequel vous l'utilisez :
Pour tous les autres packages NPM, s'ils ne sont pas compatibles avec les importations esmodule, vous pouvez utiliser un service comme JSPM qui résoudra les modules tiers et compilera les modules commonJS pour qu'ils fonctionnent comme des importations de modules ES.
Deno utilise des promesses jusqu'en bas - toutes les méthodes asynchrones renvoient des promesses :
Dans l'extrait précédent, vous pouvez voir que Deno prend en charge attente de haut niveau. Cela nous permet d'utiliser la syntaxe await dans la portée globale sans avoir à l'encapsuler dans la fonction async. Récemment, Node Node a également ajouté la prise en charge de l'attente de niveau supérieur.
Bien avant Promises ou async/wait, l'API de Node pour les opérations asynchrones a été conçue pour utiliser des rappels et suivre la convention de rappel des erreurs :
Même si les développeurs de Node ont désormais accès à Promises et à la syntaxe async/wait, l'API de Node s'attend toujours à ce que les rappels maintiennent la rétrocompatibilité.
Une grande différence est probablement que Deno meurt toujours immédiatement sur les promesses non gérées, alors que Node gère actuellement les rejets en émettant un avertissement de dépréciation à stderr. À l'heure actuelle, Node mène une enquête pour mieux comprendre la façon dont les utilisateurs traitent ce.
L'équipe de développement a également décidé d'utiliser les API des navigateurs lorsque cela s'avère pratique. Ainsi, Deno fournit une fenêtre
objet et des API telles que Ajouter un écouteur d'événements
, charger
, décharger
et aller chercher
.
Deno fournit unefenêtre
objet et des API telles queAjouter un écouteur d'événements
,charger
,décharger
etaller chercher
.
Cela signifie que les programmes Deno écrits entièrement en JavaScript et qui n'utilisent pas l'espace de noms global Deno (ni aucun test de fonctionnalité pour celui-ci) devraient être isomorphes, ce qui signifie qu'ils pourront être exécutés dans un navigateur Web moderne sans aucune modification :
Bien que l'objet window ne soit pas disponible dans Node, vous pouvez utiliser aller chercher
si vous polyfill ce champ ou si vous utilisez une bibliothèque tierce.
Quel est le meilleur : Deno ou Node ? Deno est sécurisé par défaut et prend en charge TypeScript sans avoir besoin d'un compilateur, mais dispose d'un écosystème plus petit. Node.js possède un vaste écosystème de bibliothèques et est largement utilisé, mais présente des failles de sécurité historiques. Le « meilleur » choix dépend de vos besoins spécifiques et de vos connaissances.
L'objectif de Deno n'est donc pas de remplacer Node, mais de proposer une alternative.
Node est en développement depuis plus de dix ans, ce qui le rend plus stable et plus éprouvé, ce qui en fait la norme de facto pour le JavaScript côté serveur. Deno n'est en développement que depuis deux ans et continue d'être amélioré. Entre autres choses, Deno est un excellent substitut aux scripts utilitaires qui sont généralement écrits avec bash ou python.
Cela dépendra des exigences, mais pour la majorité des applications Node, Deno n'est peut-être pas adapté pour le moment. L'un des principaux obstacles à surmonter est la création/conversion de modules NPM à utiliser avec Deno et cela changera probablement à l'avenir lorsque la prise en charge des modules Node ES deviendra plus standard.
Cependant, je pense que nous verrons progressivement Deno être de plus en plus adopté en raison de son support TypeScript de première classe et de sa bibliothèque standard moderne. Les programmeurs de nœuds devraient garder un œil sur Deno et peut-être essayer de l'utiliser pour certains projets parallèles.
Une chose est sûre, le développement actuel de Deno fait avancer l'écosystème des serveurs JS et c'est une bonne chose.
Vous avez trouvé cet article utile ? Ceux-ci vous plairont peut-être aussi !
Développeur senior chez Imaginary Cloud, spécialisée dans la création de solutions logicielles innovantes, passionnée par la technologie et l'excellence en matière de codage.
People who read this post, also found these interesting: