Fermer

août 24, 2020

Deno Built-in Tools: Un aperçu et un guide d'utilisation


Une différence surprenante entre Deno et Node.js est le nombre d'outils intégrés au runtime. Hormis une console REPL (Read-Eval-Print Loop), Node.js nécessite des modules tiers pour gérer la plupart des activités de codage indirectes telles que les tests et le linting. Les outils intégrés de Deno fournissent presque tout ce dont vous avez besoin.

Avant de commencer, une note. Deno est nouveau! Utilisez ces outils avec prudence. Certains peuvent être instables. Rares sont ceux qui ont des options de configuration. D'autres peuvent avoir des effets secondaires indésirables tels que le traitement récursif de chaque fichier dans chaque sous-répertoire. Il est préférable de tester les outils à partir d'un répertoire de projet dédié.

Installez Deno

Installez Deno sur macOS ou Linux à l'aide de la commande de terminal suivante:

 curl -fsSL https://deno.land/x/install/install .sh | sh

Ou depuis Windows Powershell:

 iwr https://deno.land/x/install/install.ps1 -useb | iex

D'autres options d'installation sont fournies dans le manuel Deno .

Entrez deno --version pour vérifier que l'installation a réussi. Les numéros de version du moteur JavaScript V8, du compilateur TypeScript et de Deno lui-même sont affichés.

Upgrade Deno

Upgrade Deno vers la dernière version avec:

 deno upgrade

Ou mise à niveau vers la version spécifique telle que la v1.3.0:

 deno upgrade --version 1.30.0

La plupart des outils ci-dessous sont disponibles dans toutes les versions, mais les éditions ultérieures peuvent avoir plus de fonctionnalités et de corrections de bogues.

Deno Help

Une liste d'outils et d'options peut être consultée en entrant:

 deno help

Boucle Read-Eval-Print (REPL)

Comme Node.js, une console d'évaluation d'expression REPL est accessible en entrant deno dans votre terminal. Chaque expression que vous entrez renvoie un résultat ou undefined :

 $ deno

Deno 1.3.0
quitter avec ctrl + d ou fermer ()
> const w = 'Monde';
indéfini
> w
Monde
> console.log (`Bonjour $ {w}!`);
Bonjour le monde!
indéfini
> fermer ()

$

Les expressions précédemment saisies peuvent être réintroduites en utilisant les touches de curseur pour naviguer dans l'historique des expressions.

Dependency Inspector

Une arborescence de toutes les dépendances de module peut être visualisée en saisissant deno info est le chemin / URL d'un script d'entrée.

Considérez le code de bibliothèque lib.js suivant avec exporté bonjour et somme ] fonctions:

 // bibliothèque générale: lib.js

/ **
 * retourne "Bonjour !" chaîne
 * @module lib
 * @param {string} nom
 * @returns {string} Bonjour !
 * /
fonction d'exportation bonjour (nom = 'Anonymous') {

  return `Bonjour $ {name.trim ()}!`;

};

/ **
 * Renvoie le total de tous les arguments
 * @module lib
 * @param {... *} args
 * @returns {*} au total
 * /
fonction d'exportation sum (... args) {

  return [...args] .reduce ((a, b) => a + b);

}

Ceux-ci peuvent être utilisés à partir d'un script d'entrée principal, index.js dans le même répertoire:

 // script d'entrée principal: index.js

// importer les modules lib.js
import {bonjour, somme} de './lib.js';

const
  spr = sum ('Site', 'Point', '.com', '', 'lecteur'),
  ajouter = somme (1, 2, 3);

// production
console.log (bonjour (spr));
console.log ('total:', ajouter);

Le résultat de l'exécution de deno run ./index.js[19459012 Often ./[19659005[/19659005 ./index.js.

Bonjour lecteur SitePoint.com!
total: 6

Les dépendances utilisées par index.js peuvent être examinées avec deno info ./index.js[19459012[19459012[19659005 )$$ deno info ./index.js

local: /home/deno/testing/index.js
type: JavaScript
deps:
fichier: ///home/deno/testing/index.js
└── fichier: ///home/deno/testing/lib.js

De même, les dépendances requises par toute URL de module peuvent être examinées, bien que sachez que le module sera téléchargé et mis en cache localement lors de la première utilisation. Par exemple:

 $ deno info https://deno.land/std/hash/mod.ts

Téléchargez https://deno.land/std/hash/mod.ts
Téléchargez https://deno.land/std@0.65.0/hash/mod.ts
Téléchargez https://deno.land/std@0.65.0/hash/_wasm/hash.ts
Téléchargez https://deno.land/std@0.65.0/hash/hasher.ts
Téléchargez https://deno.land/std@0.65.0/hash/_wasm/wasm.js
Téléchargez https://deno.land/std@0.65.0/encoding/hex.ts
Téléchargez https://deno.land/std@0.65.0/encoding/base64.ts
deps:
https://deno.land/std/hash/mod.ts
  └─┬ https://deno.land/std@0.65.0/hash/_wasm/hash.ts
    ├─┬ https://deno.land/std@0.65.0/hash/_wasm/wasm.js
    │ └── https://deno.land/std@0.65.0/encoding/base64.ts
    ├── https://deno.land/std@0.65.0/encoding/hex.ts
    └── https://deno.land/std@0.65.0/encoding/base64.ts

Pour plus d'informations, voir le Deno Manual: Dependency Inspector .

Linter (Syntax Checker)

Deno fournit un linter pour valider le code JavaScript et TypeScript. Il s’agit d’une fonction instable qui nécessite l’indicateur - instable mais aucun fichier ne sera modifié lors de son utilisation.

Le lintage est utile pour repérer les erreurs de syntaxe moins évidentes et garantir que le code respecte les normes de votre équipe. Vous utilisez peut-être déjà un linter tel que ESLint dans votre éditeur ou à partir de la ligne de commande, mais Deno fournit une autre option dans n'importe quel environnement où il est installé.

Pour lint récursivement tout .js et .ts dans les répertoires courant et enfant, entrez deno lint --unstable :

 $ deno lint --unstable

(no-extra-semi) Point-virgule inutile.
};
 ^
    à /home/deno/testing/lib.js:13:1

1 problème trouvé

Vous pouvez également spécifier un ou plusieurs fichiers pour limiter le peluchage. Par exemple:

 $ deno lint --unstable ./index.js
$

Pour plus d'informations, voir le Deno Manual: Linter . Il comprend une liste de règles que vous pouvez ajouter aux commentaires de code pour ignorer ou appliquer des syntaxes spécifiques.

Test Runner

Deno dispose d'un testeur intégré pour les tests unitaires des fonctions JavaScript ou TypeScript.

Les tests sont définis dans tout fichier nommé test avec .js .mjs .ts .jsx ou .tsx . Il doit faire un ou plusieurs appels à Deno.test et passer une chaîne de nom de test et une fonction de test. La fonction peut être synchrone ou asynchrone et utiliser divers utilitaires d'assertion pour évaluer les résultats.

Créez un nouveau sous-répertoire test avec un fichier nommé lib.test.js :

 // test de la bibliothèque lib.js

// assertions
import {assertEquals} de 'https://deno.land/std/testing/asserts.ts';

// modules lib.js
import {bonjour, somme} de '../lib.js';

// fonction bonjour
Deno.test ('lib / hello tests', () => {

  assertEquals (bonjour ('Quelqu'un'), 'Bonjour quelqu'un!');
  assertEquals (bonjour (), 'Bonjour Anonyme!');

});

// somme des entiers
Deno.test ('lib / sum integer tests', () => {

  assertEquals (somme (1, 2, 3), 6);
  assertEquals (somme (1, 2, 3, 4, 5, 6), 21);

});

// chaînes de somme
Deno.test ('lib / sum string tests', () => {

  assertEquals (sum ('a', 'b', 'c'), 'abc');
  assertEquals (sum ('A', 'b', 'C'), 'AbC');

});

// somme des valeurs mixtes
Deno.test ('tests mixtes lib / somme', () => {

  assertEquals (sum ('a', 1, 2), 'a12');
  assertEquals (somme (1, 2, 'a'), '3a');
  assertEquals (sum ('an', null, []'ed'), 'annulled');

});

Pour exécuter tous les tests à partir de tous les répertoires, entrez deno test . Ou exécutez des tests stockés dans un répertoire spécifique avec deno test

. Par exemple:

 $ deno test ./test

exécution de 4 tests
test lib / bonjour tests ... ok (4ms)
test lib / sum entiers tests ... ok (2ms)
test lib / sum string tests ... ok (2ms)
test lib / sum tests mixtes ... ok (2ms)

résultat du test: ok. 4 réussi; 0 a échoué; 0 ignoré; 0 mesuré; 0 filtré (11 ms)

$

Une chaîne - filter ou une expression régulière peut également être spécifiée pour limiter les tests par leur nom. Par exemple:

 $ deno test --filter "hello" ./test

exécution de 1 tests
test lib / bonjour tests ... ok (4ms)

résultat du test: ok. 1 réussi; 0 a échoué; 0 ignoré; 0 mesuré; 3 filtré (5 ms)

Les tests plus longs peuvent être arrêtés au premier échec en passant une option - failfast .

Pour plus d'informations, voir le Deno Manual: Testing . Quelques modules de test tiers sont également disponibles, y compris Merlin et Ruhm mais ceux-ci utilisent toujours Deno.test sous la surface.

V8 Debugger

Deno fournit le même moteur V8 et le même débogueur que Node.js. Il est possible de se connecter au débogueur à l'aide du navigateur Chrome ou de VS Code puis de parcourir le code pour afficher les modifications apportées aux variables et aux objets.

Pour lancer le débogueur, exécutez un script avec - inspect ou - inspect-brk pour s'arrêter sur la première ligne. Si vous devez vous connecter au débogueur à partir d'un autre périphérique de votre réseau, ajoutez son adresse IP et un port ou autorisez une connexion de n'importe où en utilisant - inspect = 0.0.0.0: 9229 . Par exemple:

 $ deno run --inspect-brk = 0.0.0.0: 9229 ./index.js

Débogueur à l'écoute sur ws: //0.0.0.0: 9229 / ws / ceb123 ...
La session du débogueur a démarré.

Ouvrez dans un nouvel onglet Chrome et le script deno apparaîtra comme une nouvelle Cible distante :

 Chrome inspect

Remarque: les «DevTools dédiés pour Node» ne se connectent pas au débogueur de Deno, même s'ils sont similaires.

Cliquez sur le lien inspect de la cible pour lancer DevTools. Cela vous sera familier si vous avez utilisé le débogage côté client. L'onglet Sources est le plus utile et vous permet de parcourir l'exécution du code:

 Deno V8 Debugger DevTools

Pour plus d'informations, reportez-vous au Deno Manual: Débogueur .

Formateur de code

Le formateur de code intégré formate automatiquement le code JavaScript et TypeScript de la même manière que Prettier . Le formateur de Deno est également avisé et il n’est actuellement pas possible de configurer des options.

Pour l’utiliser, entrez deno fmt pour formater récursivement chaque fichier dans chaque sous-répertoire. Par exemple:

 $ deno fmt

/home/deno/testing/index.js
/home/deno/testing/test/lib.test.js
/home/deno/testing/lib.js

Sinon, vous pouvez formater un ou plusieurs fichiers individuels – par exemple, deno fmt ./index.js[19459012Often[19659009[]) Si vous examinez le fichier lib.test.js , vous verrez que le formateur a supprimé certains espacements et converti les chaînes pour utiliser des guillemets doubles ( "):

 // fonction bonjour
Deno.test ("lib / hello tests", () => {
  assertEquals (bonjour ("Quelqu'un"), "Bonjour quelqu'un!");
  assertEquals (bonjour (), "Bonjour anonyme!");
});

Des blocs de code individuels peuvent être ignorés en ajoutant un commentaire // deno-fmt-ignore . Par exemple:

 // deno-fmt-ignore
const bin = [
              1, 0, 0,
              0, 1, 0,
              0, 0, 1,
            ];

Des fichiers entiers peuvent être ignorés en ajoutant un commentaire // deno-fmt-ignore-file en haut du code.

Pour plus d'informations, voir le Deno Manual: Code Formatter .

Attention! Le formatage automatisé peut nuire aux commentaires JSDoc.

Documentation Generator

Deno peut générer de la documentation à partir des commentaires JSDoc dans le code source, qui expliquent le but, les paramètres et la valeur de retour d’une fonction. Actuellement, Deno ne génère de la documentation que pour les modules qui exportent fonctions. Par exemple:

 $ deno doc ./lib.js

Défini dans le fichier: ///home/deno/testing/lib.js: 9: 0

fonction bonjour (nom)
  retourne "Bonjour !" chaîne
  @module lib
  @param {string} nom
  @returns {string} Bonjour !

Défini dans le fichier: ///home/deno/testing/lib.js: 21: 0

fonction somme (... args)
  Renvoie le total de tous les arguments
  @module lib
  @param {... *} args
  @returns {*} au total

$

L'ajout d'un indicateur - json génère la documentation au format JSON.

Pour plus d'informations, voir le Deno Manual: Documentation Generator .

Script Bundling

] Votre script principal et toutes ses dépendances peuvent être regroupés dans un seul fichier en utilisant:

 deno bundle  

Par exemple:

 $ deno bundle ./index.js ./index.bundle.js

Fichier bundle: ///home/deno/testing/index.js
Émettre "./index.bundle.js" (3,13 Ko)

Le script résultant peut alors être exécuté:

 $ deno run ./index.bundle.js

Bonjour lecteur SitePoint.com!
total: 6

Cela peut être utile lors de la distribution de scripts aux utilisateurs finaux ou du déploiement d'une base de code finale sur un serveur en direct.

Remarque: les appels de niveau supérieur wait peuvent échouer lors du regroupement, donc un La fonction wrapper async doit être ajoutée. Il s'agit d'un problème connu qui sera résolu dans les prochaines versions de Deno.

Pour plus d'informations, reportez-vous au Deno Manual: Bundling .

Script Installer

Un script Deno peut être installé globalement afin qu'il puisse être exécuté à partir de n'importe quel emplacement du système de fichiers. C'est similaire à l'installation de modules globaux Node.js, mais un peu plus simple et plus facile à utiliser.

La commande deno install doit être passée:

  1. Any required runtime permission flags such comme - allow-read - allow-write ou - allow-net .
  2. Un nom de script installé facultatif avec ] - nom .
  3. Un dossier racine d'installation facultatif avec - racine . Si ce n'est pas défini, Deno installe le script dans le chemin défini dans la variable d'environnement DENO_INSTALL_ROOT ou $ HOME / .deno / bin / .
  4. Le chemin ou l'URL du module .

L'exemple de script ci-dessus peut être installé avec:

 $ deno install --name myscript ./index.js

✅ myscript installé avec succès
/home/deno/.deno/bin/myscript

Un fichier myscript est créé dans le répertoire .deno / bin / avec le contenu suivant:

 #! / Bin / sh
# généré par deno install
deno "run" "fichier: ///home/deno/testing/index.js" "$ @"

myscript peut maintenant être exécuté à partir de n'importe où sur le système. Par exemple:

 cd ~
$ myscript

Bonjour lecteur SitePoint.com!
total: 6

Ce processus permet d'indiquer facilement aux utilisateurs comment installer votre application à partir d'une URL publiée. Par exemple:

 deno install --name myapp https://myserver.com/myapp.js
myapp

Deno ne fournit actuellement pas de commande uninstall ou remove . La seule façon de supprimer le script est de supprimer manuellement le fichier généré du répertoire .deno / bin / ou de l'endroit où il a été installé.

Pour plus d'informations, voir le Deno Manual: Script Installateur .

Les outils de Deno sont nouveaux et certains sont rudimentaires, mais une approche «standard» documentée présente des avantages. Node.js offre de nombreuses options tierces, mais cela peut entraîner une paralysie des choix ou un changement de solution continu. Avez-vous utilisé la même suite de tests Node.js?

Cependant, méfiez-vous: ces outils intégrés peuvent évoluer rapidement à mesure que l'utilisation de Deno se développe.

Deno Foundations

Get up to vitesse avec Deno. Notre collection Deno Foundations vous aide à faire vos premiers pas dans le monde Deno et au-delà, et nous y ajoutons constamment. Nous vous apporterons les tutoriels dont vous avez besoin pour devenir un pro. Vous pouvez toujours vous référer à notre index tel qu’il est mis à jour à la fin de notre introduction à Deno:

Deno Foundations




Source link