Fermer

juillet 13, 2020

Ce que vous devez savoir –


Depuis son annonce, Deno a suscité beaucoup d'intérêt au sein de la communauté JavaScript. En tant que moteur d'exécution JavaScript conçu par le créateur de Node, vous pouvez vous attendre à ce qu'il y ait beaucoup de similitudes entre les deux projets, et il y en a. Cependant, il existe également des différences importantes, ce qui signifie que vous ne pouvez pas simplement remplacer l'un par l'autre.

Cet article examinera Deno par rapport à son «cousin plus âgé» pour aider à comprendre ce qu'ils ont en commun et ce les distingue. (Si vous voulez d'abord avoir le skinny sur Deno, consultez notre récente introduction .)

Support linguistique

Les deux projets sont des runtimes JavaScript, permettant au code JavaScript d'être exécuté sur un ordinateur en dehors de un navigateur Web. Voyons comment ils s’empilent en termes de prise en charge des langues.

Node.js

La version LTS actuelle de Node (v12.18.1 au moment de l’écriture) prend en charge la syntaxe et les fonctionnalités JavaScript modernes. Il prend également en charge environ 75% de la spécification ES2020. Les modules ECMAScript sont également pris en charge, mais ne sont actuellement classés que comme expérimentaux: vous devez utiliser l'extension de fichier .mjs ou ajouter la propriété "type": "module" à votre projet. package.json

Pour exécuter TypeScript (ou tout autre langage) sur Node, le code doit être compilé en JavaScript que le moteur V8 peut exécuter. Il y a plusieurs façons de le faire, avec des avantages et des inconvénients différents, donc se mettre en marche signifie devoir en choisir un et suivre le processus de configuration nécessaire.

Deno

Je n'ai trouvé aucune mention du Spécifications JavaScript prises en charge par Deno, mais comme il utilise également V8 sous le capot, je suppose un niveau de support similaire à celui de Node. Mes propres tests montrent que Deno prend en charge les fonctionnalités ES2020 comme Promise.allSettled () et le mot-clé globalThis . Les modules ECMAScript sont la valeur par défaut, avec les modules CommonJS non pris en charge sauf si vous utilisez la bibliothèque de compatibilité Node (plus d'informations à ce sujet plus tard.) boîte: pas d'installation d'outils supplémentaires à transpiler en JavaScript en premier. Bien sûr, le moteur V8 ne prend pas en charge TypeScript en natif, donc Deno transpile toujours le code sous le capot, mais tout cela est transparent et transparent pour vous en tant que développeur.

Je n'ai pas non plus trouvé de mention de la version de TypeScript Deno v1.0.1 utilise, mais il prend en charge le chaînage facultatif et la coalescence nulle (mais pas les champs de classe privés) qui le rattachent à TS 3.7.

API

Deno et Node exposent tous deux leurs propres API aux développeurs, permettant nous pour écrire des programmes qui peuvent réellement faire des choses utiles comme lire et écrire des fichiers, et envoyer et recevoir des requêtes réseau.

Node.js

Lorsque Node a été publié pour la première fois, il n'y avait pas de support intégré pour Promises. Par conséquent, la plupart des API pour les opérations asynchrones ont été écrites pour prendre un rappel en premier:

 const fs = require ('fs');
fs.readFile ('readme.txt', (err, data) => {
  si (err) {
    // Gérer l'erreur
  }
  // Sinon gérer les données
});

Même si les développeurs de nœuds ont désormais accès à Promises et à la syntaxe asynchrone / attente, les API attendent toujours des rappels afin de maintenir la compatibilité descendante.

Deno

L'API de Deno a été conçue pour tirer parti des fonctionnalités JavaScript modernes . Toutes les méthodes asynchrones renvoient des promesses. Deno prend également en charge l'attente de niveau supérieur, ce qui signifie que vous pouvez utiliser l'attente dans votre script principal sans avoir à l'encapsuler dans une fonction async.

 essayez {
  const data = attendent Deno.readFile ('readme.txt');
  // Gérer les données
} catch (e) {
  // Gérer l'erreur
}

L'équipe de développement a également pris la décision d'utiliser des normes Web dans la mesure du possible, ce qui signifie qu'elle a implémenté des API de navigateur lorsque cela est pratique. Deno fournit un objet global fenêtre et des API telles que addEventListener et fetch . Il est particulièrement agréable d'avoir accès à fetch car avec Node, vous devez remplir ce document ou utiliser une bibliothèque tierce.

Le module de compatibilité

Deno fournit une couche de compatibilité dans le but de vous permettre de réutiliser les packages Node existants. Il n'est pas encore terminé, mais il prend actuellement en charge le chargement des modules CommonJS via require () entre autres choses.

Gestion des packages

La gestion des packages est un domaine où Deno représente un changement radical par rapport à la voie de Node de faire des choses. Comme Deno en est encore à ses débuts, il reste à voir si son approche s'avérera avantageuse.

Node.js

Comme vous le savez peut-être, Node est livré avec son propre gestionnaire de packages appelé npm, qui est utilisé pour installer et gérer des packages tiers. npm est principalement utilisé avec le registre en ligne npm où la plupart des packages tiers disponibles sont répertoriés.

Lorsque vous utilisez npm pour installer un package dans votre projet, un package.json Le fichier est utilisé pour spécifier le nom du package et la plage de versions acceptable. Le package lui-même (ainsi que tous les packages dont dépend ) est ensuite téléchargé dans un dossier node_modules à l'intérieur de votre projet.

Deno

Deno supprime la nécessité d'un package gestionnaire tout à fait. Au lieu de cela, les packages sont liés directement via une URL:

 import {Response} de "https://deno.land/std@0.53.0/http/server.ts";

Lors de la première exécution de votre code, Deno récupère et compile toutes les dépendances. Ils sont ensuite mis en cache sur le système de fichiers, séparément de votre projet, de sorte que les exécutions suivantes sont beaucoup plus rapides.

Semblable au fichier package-lock.json de npm Deno vous permet de spécifier un fichier de verrouillage qui être utilisé pour garantir que seules les dépendances qui correspondent à la version exacte que vous avez importée à l'origine seront utilisées

Packages tiers

Un langage peut prospérer ou mourir sur le dynamisme de son écosystème, car la productivité repose sur le fait de ne pas avoir à réinventer le roue! Ici, il semble que Node ait actuellement l'avantage.

Node.js

Node dispose d'un écosystème large et varié de bibliothèques et de packages disponibles. Au cours des 11 années écoulées depuis sa sortie, plus d'un million de packages ont été enregistrés dans le registre npm. Bien sûr, la qualité peut varier beaucoup, et beaucoup ne sont plus activement maintenues, mais c'est toujours un gros plus pour les développeurs de nœuds.

Deno

Comme nous l'avons vu dans la section précédente, Deno essaie activement d'éviter le besoin d'un gestionnaire de paquets ou d'un registre, en permettant aux scripts d'importer des modules directement à partir de n'importe quelle URL publique. Bien sûr, il est difficile d'importer des packages si vous ne savez pas ce qui existe, donc le site Web de Deno conserve une liste de modules tiers compatibles . Au moment de l'écriture, il y a 707 modules dans la liste.

Bibliothèque standard de Deno

L'une des façons dont Deno tente d'améliorer l'expérience du développeur est de fournir une bibliothèque standard d'aides et d'utilitaires pour les tâches courantes . Tous les modules sont audités par les développeurs principaux pour garantir un code fiable et de haute qualité. Il existe des modules pour des choses comme le traitement des arguments de ligne de commande et la colorisation de la sortie du terminal – deux choses qui ne sont disponibles que sous forme de packages tiers pour Node.

Sécurité

Peut-être l'une des améliorations les plus vantées de Deno par rapport à Node est le système d'autorisations. Voyons pourquoi.

Node.js

L’exécution du nœud est très permissive, permettant au code un accès complet au réseau et au système de fichiers de l’ordinateur. Il est possible que le code tiers fasse des ravages sur votre système s'il n'est pas coché.

Deno

L'amélioration du modèle de sécurité est quelque chose que Ryan Dahl a spécifiquement prévu de faire lors de la conception de Deno. Par défaut, tout le code est exécuté dans un environnement sandbox sécurisé. Cela empêche le code d'avoir accès à des éléments tels que le système de fichiers, le réseau et les variables d'environnement, sauf si l'accès est spécifiquement accordé avec un argument de ligne de commande.

 # Autoriser le script à effectuer des requêtes réseau
deno run --allow-net server.ts

Encore mieux, lorsque vous autorisez l'accès en lecture ou en écriture au système de fichiers ou l'accès au réseau, vous pouvez fournir une liste blanche. Cela signifie que vous pouvez restreindre l'accès en lecture / écriture d'un programme Deno au dossier de données du projet par exemple, en limitant tout dommage malveillant potentiel.

Deno: Batteries incluses

Avant de conclure, je viens de terminer voulait parler d'une chose. Si vous parcourez la section des outils du manuel vous remarquerez que Deno nous offre de jolies «fonctionnalités bonus»! Les outils suivants sont intégrés pour rendre l'expérience développeur encore plus agréable:

  • bundler : regroupe un script spécifié et ses dépendances dans un seul fichier
  • débogueur : permet le débogage de vos programmes Deno avec Chrome Devtools, VS Code et d'autres outils (remarque: Node est également livré avec un débogueur)
  • inspecteur de dépendances : son exécution sur un module ES répertoriera toutes les dépendances dans un arborescence
  • générateur de documentation : analyse les annotations JSDoc dans un fichier donné et produit la documentation
  • formateur : formate automatiquement JavaScript et le code TypeScript
  • exécuteur de test : vous pouvez l'utiliser pour tester votre code JS et TS, conjointement avec le module d'assertions de la bibliothèque standard
  • linter : un linter de code (actuellement instable) pour aider à détecter les problèmes potentiels dans vos programmes

Verdict

Le but de cet article n'est pas de préconiser fo r Node ou Deno, mais plutôt pour comparer et contraster les deux. Vous devriez maintenant comprendre les similitudes entre les deux runtimes et, peut-être plus important encore, les différences.

Deno présente certains avantages particuliers aux développeurs, notamment un système d'autorisations robuste et une prise en charge de TypeScript de première classe. Les décisions de conception et les outils intégrés supplémentaires visent à fournir un environnement productif et une bonne expérience de développeur.

Le nœud, d'autre part, a un écosystème massif et bien établi autour de lui qui a plus de dix ans dans la création . Ceci, avec la pléthore de documentation et de tutoriels disponibles, fait probablement de Node.js une valeur sûre pour un certain temps.




Source link