Maison >interface Web >js tutoriel >Modules Deno: utilisation, meilleures pratiques et importations de modules de nœud

Modules Deno: utilisation, meilleures pratiques et importations de modules de nœud

Joseph Gordon-Levitt
Joseph Gordon-Levittoriginal
2025-02-12 08:33:10587parcourir

Deno Modules: Usage, Best Practices & Node Module Imports

Creusez dans le module Deno - Si vous êtes de Node.js, ce sera le plus grand changement de flux de travail que vous rencontrez. Découvrez comment ils fonctionnent et comment les utiliser le mieux, comment utiliser les modules Node.js et les packages NPM dans Deno, et plus encore.

Node.js est un runtime JavaScript basé sur le moteur Chrome V8 développé par Ryan Dahl et publié en 2009.

Deno est également un runtime javascript basé sur le moteur Chrome V8 développé par Ryan Dahl et publié en 2020. Il est créé sur la base d'une décennie d'expérience. Cela ne signifie pas nécessairement qu'il s'agit d'une suite de Node.js ou d'une alternative plus avancée, mais elle s'écarte du chemin de Node.js.

Voir aussi:

  • Notre guide NEO, y compris notre index de contenu Deno (faites défiler vers la fin)
  • Comparaison de Node.js vs Deno, et un guide pour sélectionner des outils qui conviennent à une situation spécifique

Différences principales: Deno prend en charge les API TypeScript, Sécurité, test et navigateur. Le traitement des modules a reçu moins d'attention, mais il peut être le plus grand changement dans la façon dont les applications JavaScript sont créées. Avant de discuter de Deno, permettez-moi de vous ramener à une époque plus simple ...

points clés

  • Deno est un runtime JavaScript basé sur le moteur Chrome V8 qui s'écarte de Node.js en prenant en charge les API TypeScript, de sécurité, de test et de navigateur nativement. Il choisit également d'utiliser des modules ES2015, qui sont importés à partir d'URL absolues ou relatives, contrairement à Node.js en utilisant CommonJS.
  • Deno n'a pas de gestionnaire de packages comme NPM dans Node.js. Au lieu de cela, lorsqu'il rencontre la URL d'un module dans le script, il le télécharge et le cache dans le répertoire global, ce qui signifie que peu importe le nombre de projets qui y font référence, seule une copie de la version de module spécifique est nécessaire.
  • Deno permet le versioning des URL du module afin que les versions de code spécifiques puissent être référencées. Il prend également en charge l'importation de chaque module utilisé dans un projet à l'aide d'un fichier de dépendance unique, ou attribuant un nom à une URL complète ou partielle à l'aide d'une carte d'importation.
  • La plate-forme a une sécurité intégrée, restreint le système de fichiers et l'accès au réseau et offre des options de vérification d'intégrité. Il prend également en charge l'utilisation de l'API Node.js et des modules multiplateformes qui s'exécutent sur Node.js et Deno sans traitement spécial, et ces modules peuvent devenir de plus en plus populaires car l'écosystème d'exécution JavaScript continue d'évoluer d'autant plus courant.

module node.js

En 2009, JavaScript n'avait pas de système de module standard. Une partie de cela est due à ses antécédents de navigateur, et il faudra plusieurs années à apparaître ES6 / ES2015.

node.js est inimaginable s'il ne fournit pas de modules, il adopte donc les communs de plusieurs solutions de contournement de la communauté. Cela a conduit au développement du Node Package Manager (NPM), qui permet aux développeurs de rechercher, d'utiliser et de publier facilement leurs propres modules JavaScript.

L'utilisation du NPM a augmenté de façon exponentielle. Il est devenu le gestionnaire de packages le plus populaire de tous les temps et, à la mi-2020, il a accueilli près de 1,5 million de modules avec plus de 800 nouveaux ajouts par jour (source: moduleCounts.com).

module deno

Deno Sélectionnez pour utiliser les modules ES2015, que vous pouvez importer à partir d'URL absolues ou relatives:

<code>import { something } from 'https://somewhere.com/somehow.js';
</code>

Le script de cette URL doit exporter la fonction ou d'autres valeurs en conséquence, par exemple:

<code>export function something() {
  console.log('something was executed');
}
</code>

Deno utilise le même système de modules que l'implémenté dans les navigateurs Web modernes.

Node.js prend également en charge les modules ES2015 ... mais cela est compliqué et toujours expérimental. Les modules CommonJS et ES2015 semblent similaires, mais fonctionnent différemment:

  • CommonJS charge les dépendances du système de fichiers au besoin lors de l'exécution du code.
  • Le module ES pré-parse à partir de l'URL pour résoudre d'autres importations avant d'exécuter le code.

Node.js doit continuer à prendre en charge les communjs CommonJS et gérer les modules ES mixtes. Par conséquent, il suppose:

  1. Les fichiers se terminant par .cjs utilisent CommonJs
  2. Les fichiers se terminant par .mjs Utilisent le module ES
  3. Les fichiers se terminant par .js sont des communjs, à moins que le package le plus récent ne définisse "Type": "Module", ou nœud est exécuté avec l'option - Input-Type = Module.
On peut comprendre pourquoi Deno a choisi un seul système de module standard. Cependant, le NPM est un facteur important dans le succès de Node, il est donc surprenant que Deno l'ait annulé.

Aucun gestionnaire de packages.

Une critique du NPM est l'énorme échelle du répertoire Node_Modules pour chaque projet. Comme un module nécessite une version spécifique d'autres modules, il peut atteindre des centaines de mégaoctets.

Deno Modules: Usage, Best Practices & Node Module Imports

Deno télécharge et met en cache dans le répertoire mondial lorsque la première fois queo rencontre l'URL d'un module dans le script. Ainsi, peu importe le nombre de projets qui y font référence, seule une copie de la version de module spécifique est nécessaire.

Je sais que vous pensez: "Ah, mais si ..."

… mais Deno a la possibilité de résoudre le problème soulevé par l'URL du module.

URL peu fiable

L'URL peut échouer temporairement, changer ou disparaître de façon permanente. Il s'agit d'un problème pour tout gestionnaire de packages, et NPM a également rencontré des problèmes dans le passé (il permet également l'installation des URL).

Pour les applications Node.js critiques, il est recommandé d'ajouter votre répertoire Node_Modules au référentiel GIT / Autre de votre projet.

Deno prend en charge des options similaires. Vous pouvez définir la variable d'environnement Deno_Dir sur le chemin du répertoire dans le projet actuel, par exemple:

<code>DENO_DIR=~/myproject/deno_modules`
</code>
utilisé dans Windows CMD:

<code>> set DENO_DIR="C:\myproject\deno_modules"
</code>
ou Windows PowerShell:

<code>> $env:DENO_DIR="C:\myproject\deno_modules"
</code>
Lorsque votre application s'exécute, Deno cache les modules à ce répertoire afin qu'ils puissent être ajoutés au référentiel de contrôle source du projet.

Vous pouvez également envisager de regrouper les dépendances en un seul fichier JavaScript ou TypeScript. La commande Deno Bundle peut le faire en une seule étape:

<code>deno bundle myscript.js myscript.bundle.js</code>
où myscript.js est un script d'entrée qui est généralement exécuté à l'aide de Deno Run. Le fichier MyScript.bundle.js autonome généré peut être déployé sur un serveur en temps réel.

pack avec top attend

Deno prend en charge l'attente de niveau supérieur: pas besoin d'envelopper l'appel dans une fonction asynchrone anonyme. Malheureusement, l'attente de niveau supérieur échoue dans le bundle, de sorte que la fonction de wrapper doit être ajoutée. Il s'agit d'un problème connu et sera résolu dans une version future.

Dernier: Méfiez-vous des modules de NEno aléatoires sur des URL inhabituelles! Les URL Deno, Github ou Bitbucket avec une bonne documentation et une bonne contribution de la communauté sont généralement plus sûres.

Contrôle de la version du module

Idéalement, l'URL du module doit être versionnée afin que vous puissiez référencer une version de code spécifique. Par exemple, la bibliothèque standard Deno vous permet de charger des versions spécifiques des modules de serveur HTTP:

<code>import { something } from 'https://somewhere.com/somehow.js';
</code>

Vous pouvez également vous référer à la branche maître:

<code>export function something() {
  console.log('something was executed');
}
</code>

mais cela téléchargera la dernière version, et les versions futures peuvent être incompatibles avec votre application.

Vous pouvez utiliser des conventions de contrôle de version similaires pour publier des modules Deno sur vos propres serveurs, mais à mesure qu'il devient plus populaire, votre site Web peut recevoir beaucoup de trafic. Un moyen plus fiable consiste à utiliser un référentiel de services comme GitHub et à attribuer une balise GIT à chaque version. Des services tels que denopkg.com et untkg.com peuvent être utilisés pour fournir des URL du module version publique.

Module multiple mentionne

Vous devrez peut-être référencer la même URL du module dans de nombreux fichiers dans la base de code d'application. Lorsque vous souhaitez mettre à jour le module, vous devez modifier l'URL à plusieurs endroits. La recherche et le remplacement peuvent fonctionner, mais il est maladroit, sujet aux erreurs et augmente la probabilité de conflits de fusion.

Alternativement, vous pouvez utiliser un fichier de dépendance unique qui importe chaque module utilisé dans le projet. Il est généralement nommé Deps.js ou Deps.ts:

<code>DENO_DIR=~/myproject/deno_modules`
</code>

Vous pouvez ensuite référencer le module Deno à partir de Deps.js dans tout autre fichier de projet:

<code>> set DENO_DIR="C:\myproject\deno_modules"
</code>

Lorsque le module est mis à jour, il vous suffit de modifier la référence URL unique dans Deps.js.

Une autre option consiste à importer la carte. Il s'agit d'un petit fichier JSON, généralement nommé import_map.json, qui attribue le nom à l'URL complète ou partielle:

<code>> $env:DENO_DIR="C:\myproject\deno_modules"
</code>

Vous pouvez référencer le nom de la carte d'importation dans n'importe quel script:

<code>deno bundle myscript.js myscript.bundle.js</code>

Ensuite, lors de l'exécution de l'application avec Deno Run, importez le fichier JSON:

<code>import { serve } from 'https://deno.land/std@0.61.0/http/server.ts';
</code>

Les cartes d'importation sont actuellement une fonction instable, donc l'indicateur - un instable est requis. Cette fonctionnalité peut changer dans les futures versions NEO.

Intégrité de l'étude

Le code référencé à partir de l'URL peut être modifié ou piraté à votre insu. Des sites Web bien connus ont été piratés car ils sont directement liés au code client tiers. Imaginez combien de dégâts cela causerait si un script pouvait accéder aux ressources du serveur.

Deno a une sécurité intégrée, les scripts doivent donc être exécutés avec des drapeaux tels que - allow read et - allow-net pour limiter le système de fichiers et l'accès réseau. Cela aidera à prévenir certains problèmes, mais ce n'est pas un substitut pour vérifier l'intégrité du module!

Deno fournit une option de vérification d'intégrité. Si vous utilisez un fichier de dépendance unique (comme mentionné ci-dessus), c'est le plus facile:

<code>import { serve } from 'https://deno.land/std/http/server.ts';
</code>

La commande deno suivante génère un fichier Lock.json contenant la somme de contrôle de tous les modules deno importés:

<code>import { something } from 'https://somewhere.com/somehow.js';
</code>

Lorsqu'un autre développeur clones de votre projet, ils peuvent recharger chaque module et vérifier l'intégrité de chaque module pour s'assurer qu'ils sont les mêmes que votre module:

<code>export function something() {
  console.log('something was executed');
}
</code>

Deno n'applique pas les vérifications d'intégrité. Il est préférable d'exécuter ces processus en tant que crochets GIT automatisés ou opérations similaires.

en utilisant le module Node.js

De nombreuses API Node.js ont été copiées pour Deno - voir deno.land/std/node. Ce n'est pas une liste complète, mais vous trouverez des fichiers, des événements, des tampons et des modules utilitaires communs.

La collection de près de 800 modules de NEno tiers est fournie sur

deno.land/x. Il existe des cadres similaires à express.js, des pilotes de base de données, des fonctions de chiffrement, des outils de ligne de commande, etc.

Vous trouverez également une liste sélectionnée de modules populaires, tels que Awesome Deno.

Cependant, vous pourrez peut-être importer l'un des 1,5 million de modules Node.js. Plusieurs CDN peuvent convertir les packages NPM / CommonJS en URL du module ES2015, y compris:

    skypack.dev
  • jspm.org
  • untkg.com
  • (ajouter? String de requête du module dans URL)
si le module dont vous avez besoin fonctionne correctement dans Deno est une autre affaire.

Heureusement, les modules multiplateformes qui s'exécutent sur Node.js et Deno sans traitement spécial peuvent émerger alors que l'écosystème d'exécution JavaScript continue d'évoluer.

Plus de questions de module

se référant aux URL du module est controversé, et pour ceux du NPM très populaire, cela peut être dérangeant. Autrement dit, Deno simplifie l'utilisation des modules JavaScript. Il aborde plusieurs critiques de NPM tout en atténuant de nombreux effets secondaires potentiels du module ES2015.

Mais c'est loin d'être parfait.

Il est facile de publier des modules NPM, et il est également facile de rechercher npmjs.com. Vos termes de recherche peuvent rendre 500 résultats, mais en classant les packages par popularité, qualité et facteurs de maintenance, vous pouvez minimiser la paralysie de sélection.

Soumettre le code à une liste de modules tiers dans Deno est difficile. Les modules doivent passer des tests automatisés, mais la qualité ne peut pas être garantie et les résultats de recherche sont organisés par ordre alphabétique. Une fois que le nombre de modules atteint quelques milliers, les systèmes existants ne dureront probablement pas.

Il est également facile de mettre à jour les packages dans NPM. Vous pouvez exécuter NPM OUTDAT pour afficher la liste de mise à jour, ou simplement exécuter NPM Installer lors de la référence d'un numéro de version plus lâche dans package.json.

Il n'y a pas d'option de vérification de mise à jour équivalente dans Deno. Il existe des projets de type gestionnaire de packages disponibles, y compris Trex, des dépendances à la mise à jour de Deno et des versions de deno-ceck, mais ces projets s'appuient généralement sur des cartes d'importation et comptent toujours sur les URL versés sémantiques.

devriez-vous passer à Deno?

Node.js n'est pas mort. Il a mûri et a dix ans d'expérience dans les modules, la technologie, la documentation et l'exécution.

Deno utilise la plupart de ces connaissances, mais elle est très nouvelle et se développera rapidement dans les années à venir. Il peut être trop tôt pour les grandes applications, mais pour les petits projets, le risque est moindre. Ceux qui utilisent déjà TypeScript ou d'autres langues peuvent profiter d'une expérience beaucoup plus facile, mais les développeurs Node.js n'auront pas de difficulté à se convertir en Deno puis à se convertir.

Cependant, Deno a un avantage intéressant:

  • son système de modules est le même que le client javascript
  • Il implémente de nombreuses API de navigateur: vous pouvez référencer les objets de fenêtre, définir des écouteurs d'événements, démarrer des travailleurs Web, faire des demandes de serveur distantes à l'aide de l'API Fetch (), etc.

Le rêve des bibliothèques JavaScript isomorphes qui travaillent sur le client ou le serveur est un grand pas en avant.

Bases de Deno

Apprenez rapidement Deno. Notre collection de bases de Deno vous aide à faire le premier pas dans le monde de Neno et au-delà, et nous continuons à y ajouter du contenu. Nous vous fournirons les tutoriels dont vous avez besoin pour devenir un professionnel. Vous pouvez toujours mettre à jour l'index à la fin de notre guide de démarrage de Deno:

➤ Bases de Deno

Les questions fréquemment posées sur le module Deno

Qu'est-ce qu'un module deno? Le module Deno est une unité de code dans Deno, qui est un runtime sécurisé pour JavaScript et TypeScript. Les modules dans Deno sont similaires aux modules CommonJS dans les modules Node.js et ES6 dans JavaScript moderne. Ils permettent aux développeurs d'organiser et de partager du code en le décomposant en blocs réutilisables et encapsulés.

Comment créer des modules dans Deno? La création de modules dans Deno est simple. Vous pouvez créer un nouveau fichier (par exemple, module.ts), définir vos fonctions ou classes, puis les exporter à l'aide du mot-clé d'exportation. D'autres scripts Deno peuvent importer et utiliser ces modules.

Comment importer des modules dans Deno? Pour importer un module dans Deno, vous pouvez utiliser le mot-clé d'importation suivi par le chemin ou l'URL du module. Deno prend en charge les importations locales et distantes.

Puis-je utiliser des modules tiers dans Deno? Oui, Deno prend en charge l'importation de modules directement à partir des URL, vous permettant d'utiliser des modules tiers hébergés sur le registre des packages ou le référentiel GitHub.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn