Deno a attiré l'attention de la communauté JavaScript depuis sa sortie. En tant que runtime javascript conçu par des créateurs de nœuds, vous pourriez vous attendre à beaucoup de similitudes entre ces deux projets, et c'est vrai. Cependant, ils ont également des différences importantes, ce qui signifie que vous ne pouvez pas simplement remplacer l'autre par l'autre.
Cet article explorera la relation de Deno avec son "ancien senior" Node.js pour aider à comprendre ce qu'ils sont en commun et différent. (Si vous souhaitez d'abord en savoir plus sur le contenu principal de Deno, vous pouvez consulter notre récent article d'introduction.)
Les deux projets sont des temps exécutifs JavaScript, permettant l'exécution du code JavaScript sur un ordinateur (en dehors d'un navigateur Web). Examinons leur comparaison dans le soutien linguistique.
La version LTS actuelle de Node (v12.18.1 à ce jour) prend en charge la syntaxe et les fonctionnalités JavaScript modernes. Il prend également en charge environ 75% des spécifications ES2020. Le module ECMAScript est également pris en charge, mais n'est actuellement classé que comme expérimental: vous devez utiliser l'extension de fichier .mjs, ou ajouter la propriété "type": "module" dans le fichier package.json du projet.
Afin d'exécuter TypeScript (ou toute autre langue) sur le nœud, le code doit être compilé en code JavaScript que le moteur V8 peut exécuter. Il existe plusieurs façons de le faire, chacune avec ses avantages et ses inconvénients, donc se mettre en service signifie avoir à choisir l'un d'eux et suivre le processus de configuration nécessaire.
Je n'ai trouvé aucune mention de la spécification JavaScript prise en charge par Deno, mais comme il utilise également V8 en arrière-plan, je suppose qu'il est similaire au niveau de support de Node. Mes propres tests montrent que DENO prend en charge les fonctionnalités ES2020 telles que promesse.AllSetTled () et Global This Keywords. Le module ECMAScript est par défaut et le module CommonJS n'est pris en charge que si vous utilisez la bibliothèque de compatibilité du nœud (plus à ce sujet plus tard).
TypeScript est pris en charge comme un langage de première classe dans Deno, ce qui signifie qu'il peut être utilisé hors de la boîte: pas besoin d'installer d'abord des outils supplémentaires pour se convertir en JavaScript. Bien sûr, le moteur V8 lui-même ne prend pas en charge nativement TypeScript, donc Deno convertit toujours le code en arrière-plan, mais cela est complètement transparent et transparent pour vous en tant que développeur.
Je ne trouve pas non plus d'informations sur la version de TypeScript à utiliser pour Deno v1.0.1, mais elle prend en charge le chaînage en option et la fusion de valeur nul (mais pas les champs de classe privée), qui peut être positionné comme TS 3.7.
Deno et Node exposent tous deux leurs propres API aux développeurs, nous permettant d'écrire des programmes qui peuvent effectuer des opérations utiles telles que la lecture et la rédaction de fichiers, et l'envoi et la réception de demandes de réseau.
Lorsque le nœud a été libéré pour la première fois, il n'y avait pas de support intégré pour la promesse. Par conséquent, la plupart des API pour les opérations asynchrones sont écrites à l'aide de rappels d'abord:
const fs = require('fs'); fs.readFile('readme.txt', (err, data) => { if (err) { // 处理错误 } // 否则处理数据 });
Même si les développeurs de nœuds peuvent désormais utiliser la syntaxe Promise et Async / Await, l'API nécessite toujours des rappels pour maintenir la compatibilité arrière.
Deno est conçue pour profiter des capacités JavaScript modernes. Toutes les méthodes asynchrones renvoient la promesse. Deno prend également en charge l'attente de niveau supérieur, ce qui signifie que vous pouvez utiliser Await dans le script principal sans l'envelopper dans une fonction asynchrone.
try { const data = await Deno.readFile('readme.txt'); // 处理数据 } catch (e) { // 处理错误 }
L'équipe de développement a également décidé d'utiliser les normes Web dans la mesure du possible, ce qui signifie qu'ils ont implémenté l'API du navigateur lorsqu'ils sont pratiques. Deno fournit des objets de fenêtre globaux et des API tels que AddeventListener et Fetch. Accéder à Fetch est particulièrement bon car dans le nœud, vous devez utiliser des bibliothèques polyfill ou tierces pour cela.
Deno fournit une couche de compatibilité conçue pour vous permettre de réutiliser les packages de nœuds existants. Ce n'est pas encore fait, mais il prend actuellement en charge le chargement des modules CommonJS via require (), entre autres fonctionnalités.
La gestion des packages est un domaine où le Deno et le nœud fonctionnent très différemment. Étant donné que Deno en est encore à ses débuts, il reste à voir si son approche s'avérera avantageuse.
Vous savez peut-être que Node est livré avec un gestionnaire de packages appelé NPM pour l'installation et la gestion de packages tiers. Le NPM est principalement utilisé avec le registre NPM en ligne, et la plupart des packages tiers disponibles y sont répertoriés.
Lorsque vous installez le package dans votre projet à l'aide de NPM, le fichier package.json est utilisé pour spécifier le nom du package et la plage de versions acceptable. Le package lui-même (et tout package dont il dépend) sera ensuite téléchargé dans le dossier Node_modules à l'intérieur du projet.
Deno élimine complètement le besoin de gestionnaires de packages. Au lieu de cela, le package est directement lié via l'URL:
import { Response } from "https://deno.land/std@0.53.0/http/server.ts";
La première fois que vous exécutez votre code, Deno obtient et compile toutes les dépendances. Ils seront ensuite mis en cache dans le système de fichiers, séparé de votre projet, donc les exécutions suivantes seront plus rapides.
Similaire au fichier Package-lock.json de NPM, Deno vous permet de spécifier un fichier de verrouillage qui sera utilisé pour garantir que seules les dépendances correspondent à la version exacte que vous importez à l'origine sont utilisées.
La prospérité d'un langage dépend de la vitalité de son écosystème, car la productivité dépend de ne pas avoir à réinventer la roue! Ici, Node semble avoir l'avantage pour le moment.
a un écosystème de bibliothèque et de package énorme et diversifié. Plus d'un million de forfaits ont été enregistrés sur le registre du NPM au cours des 11 années qui ont suivi sa sortie. Bien sûr, la qualité peut varier considérablement et de nombreux packages ne sont plus activement entretenus, mais c'est toujours un gros avantage pour les développeurs de nœuds.
Comme nous l'avons vu dans la section précédente, Deno essaie activement d'éviter la nécessité d'un gestionnaire de packages ou d'un registre, permettant aux scripts d'importer des modules directement à partir de toute URL publique. Bien sûr, il est difficile d'importer des packages si vous ne savez pas ce qu'il y a, donc le site Web de Deno conserve une liste de modules tiers compatibles. À ce jour, il y a 707 modules sur la liste.
Deno Une façon d'essayer d'améliorer l'expérience du développeur est de fournir une bibliothèque standard avec des programmes d'assistance et des services publics pour les tâches courantes. Tous les modules sont examinés par les développeurs de base pour assurer un code fiable de haute qualité. Il existe des modules pour gérer les paramètres de ligne de commande et les sorties de bornes d'ombrage - toutes les deux sont disponibles uniquement sous forme de packages tiers pour le nœud.
Peut-être que l'une des améliorations les plus vantées du Node Node est peut-être le système d'autorisation. Voyons pourquoi.
Runtime de nœud est très lâche, permettant au code d'accéder complètement au réseau et au système de fichiers de l'ordinateur. S'il n'est pas contrôlé, le code tiers peut endommager votre système.
Améliorer le modèle de sécurité est quelque chose que Ryan Dahl voulait particulièrement faire lors de la conception de Deno. Par défaut, tout le code est exécuté dans un environnement de bac à sable sécurisé. Cela empêche le code d'accéder au contenu comme le système de fichiers, le réseau et les variables d'environnement, sauf si l'accès est explicitement accordé à l'aide de paramètres de ligne de commande.
const fs = require('fs'); fs.readFile('readme.txt', (err, data) => { if (err) { // 处理错误 } // 否则处理数据 });
Mieux encore, vous pouvez fournir une liste blanche lorsque vous autorisez la lecture ou l'écriture au système de fichiers ou l'accès au réseau. Cela signifie que vous pouvez limiter l'accès en lecture / écriture au programme DENO au dossier de données du projet, par exemple, limitant toute corruption malveillante potentielle.
Avant la fin, je veux parler d'une autre chose. Si vous parcourez la section des outils du manuel, vous remarquerez que Deno nous a fourni de belles "fonctionnalités supplémentaires"! Voici les outils intégrés qui peuvent améliorer l'expérience de développement:
Le but de cet article n'est pas de promouvoir le nœud ou le nœud, mais de comparer et de comparer les deux. Vous devriez maintenant comprendre les similitudes entre ces deux temps d'exécution et, peut-être plus important encore, les différences entre elles.
Deno fournit aux développeurs certains avantages spéciaux, y compris un système d'autorisation solide et une prise en charge de type dactylographe de premier ordre. Les décisions de conception et les outils intégrés supplémentaires sont conçus pour fournir un environnement efficace et une bonne expérience de développeur.
En revanche, Node a un écosystème énorme et complet qui se développe depuis plus d'une décennie. Cela combiné avec beaucoup de documents et de tutoriels peut faire de Node.js un choix sûr pendant un certain temps à venir.
Apprenez rapidement Deno. Nos séries Neno Basics vous aideront à faire votre premier pas dans le monde Deno et nous ajoutons constamment du contenu. Nous fournirons les tutoriels dont vous avez besoin pour devenir un professionnel. Vous pouvez toujours vous référer à notre index après la mise à jour de notre profil Deno:
➤ Bases de Deno
Qu'est-ce que Node.js? Node.js est un runtime JavaScript multiplateforme open source construit sur le moteur JavaScript V8 de Chrome. Il permet aux développeurs d'exécuter JavaScript côté serveur, ce qui leur permet de créer des applications Web évolutives et hautes performances.
Qu'est-ce que Deno? Deno est un runtime sécurisé pour JavaScript et TypeScript construit sur le moteur V8. Il a été créé par la même personne (Ryan Dahl) qui a initialement développé Node.js. Deno vise à résoudre des défauts de conception et des problèmes de sécurité dans Node.js.
Quelle est la différence entre Node.js et Deno en termes d'architecture? Node.js utilise un modèle asynchrone basé sur un rappel, tandis que Deno utilise des fonctionnalités modernes telles que Async / Await pour rendre le code asynchrone plus facile à lire et à entretenir. Par rapport à Node.js, Deno a également une architecture plus modulaire et décentralisée.
Quelles sont les principales différences de sécurité entre Node.js et Deno? Deno adopte une approche de sécurité, ce qui signifie qu'il limite l'accès aux systèmes de fichiers, aux réseaux et autres opérations potentiellement dangereuses par défaut. Au lieu de cela, Node.js adopte un modèle plus lâche et les développeurs doivent gérer manuellement les paramètres de sécurité.
peut-on exécuter le module Node.js? Deno est conçu pour être compatible avec la plate-forme Web et il a son propre système de module. Bien qu'il puisse exécuter certains modules Node.js modifiés, il est généralement recommandé d'utiliser des modules natifs DENO pour une meilleure compatibilité et sécurité.
Comment est-ce que Node.js et Deno prennent en charge TypeScript? Node.js et Deno prennent en charge TypeScript. Dans Node.js, les développeurs doivent généralement configurer une étape de compilation TypeScript séparée, tandis que Deno prend en charge Native TypeScript, vous permettant d'exécuter le code TypeScript directement sans configuration supplémentaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!