Fermer

juillet 6, 2020

Un runtime JavaScript et TypeScript sécurisé –7 minutes de lecture

Un runtime JavaScript et TypeScript sécurisé - SitePoint


Mai 2020 a vu la sortie de Deno 1.0, et ce fut un sujet de conversation assez populaire. Si vous vous demandez de quoi il s'agit, vous êtes au bon endroit!

Dans cet article, j'espère vous donner un aperçu de ce qu'est Deno. Nous allons examiner ses principales fonctionnalités et nous demander pourquoi vous voudrez peut-être commencer à apprendre ce nouvel outil.

Qu'est-ce que Deno?

Qu'est-ce donc que Deno et pourquoi a-t-il été créé? Il s'agit d'un runtime JavaScript et TypeScript, ce qui signifie que vous pouvez écrire des programmes dans l'un ou l'autre langage et les exécuter à partir de la ligne de commande. Contrairement à JavaScript exécuté dans un navigateur, les programmes Deno peuvent accéder aux ressources de l'ordinateur hôte, telles que le système de fichiers et les variables d'environnement.

Si vous connaissez Node.js et vous pensez que Deno semble assez similaire, vous auriez raison. Deno est l’idée originale du créateur de Node, Ryan Dahl, qui a créé Deno pour remédier à ce qu’il considère comme les défauts de conception de Node . Les objectifs du projet sont de fournir un environnement de script sécurisé par défaut, qui traite TypeScript comme un langage de première classe et qui soit aussi compatible que possible avec le navigateur (si possible).

Fonctions de sécurité

Deno est conçu pour être sécurisé hors de la boîte. Tout le code est exécuté dans un sandbox sécurisé par défaut, ce qui signifie que vous devez donner une autorisation explicite pour autoriser un programme à accéder au réseau ou au système de fichiers.

Les programmes peuvent recevoir des autorisations avec les indicateurs de ligne de commande suivants:

  • -A, –allow-all : autorise toutes les autorisations (désactive toute la sécurité).
  • –allow-env : autorise l'obtention et la définition des variables d'environnement.
  • –allow-hrtime : autoriser la mesure du temps à haute résolution (peut être utilisé dans les attaques de synchronisation et les empreintes digitales).
  • –allow-net = : autorise l'accès au réseau. Prend éventuellement une liste blanche de domaines séparés par des virgules.
  • –allow-plugin : autorise le chargement des plugins (fonctionnalité instable).
  • –allow-read = [: autorise l'accès en lecture au système de fichiers. Prend éventuellement une liste blanche de répertoires ou de fichiers séparés par des virgules.
  • –allow-run : autorise l'exécution de sous-processus.
  • –allow-write = [: autorise l'accès en écriture au système de fichiers. Prend éventuellement une liste blanche séparée par des virgules de répertoires ou de fichiers.

Prise en charge de TypeScript de première classe

Comme je l'ai mentionné précédemment, Deno peut exécuter à la fois JavaScript et TypeScript. De plus, il prend en charge TypeScript en tant que langage de première classe. Cela signifie qu'il peut charger et exécuter votre code TypeScript sans aucune étape de construction supplémentaire. Il n'est pas nécessaire de configurer d'abord des outils supplémentaires pour transpiler votre code en JavaScript.

Bien sûr, puisque TypeScript est un surensemble de JavaScript moderne, vous pouvez également écrire votre code en bon vieux JS si vous le souhaitez! Deno prend en charge d'excellentes fonctionnalités conviviales pour les développeurs, telles que les importations de modules ES.

Utilisation du code externe

Comme Ryan l'a mentionné dans son exposé, l'un de ses objectifs pour Deno était d'éviter la nécessité d'un gestionnaire de paquets. Contrairement aux runtimes / langages tels que Node.js et PHP (qui utilisent respectivement les gestionnaires de packages npm et composer), il n'y a pas de gestionnaire de packages pour Deno.

Au lieu de cela, les packages externes sont importés directement via une URL :

 importez {Client} depuis "https://deno.land/x/mysql@2.2.0/mod.ts";

La ​​première fois que vous exécutez votre script, Deno récupérera, compilera et mettra en cache toutes les importations afin que les démarrages suivants soient rapides comme l'éclair. Évidemment, il peut arriver que vous souhaitiez le forcer à récupérer les importations, et vous pouvez le faire avec la sous-commande cache :

 deno cache --reload my_module.ts

Hébergement de packages

Bien que Deno ne fournisse pas de registre de packages en tant que tel, une liste de modules tiers est disponible ici . Le service fournit une URL standardisée et versionnée qui correspond au référentiel GitHub du module. Vous pouvez rechercher des packages par nom et voir une brève description, puis cliquer pour voir le fichier Lisez-moi du package.

La bibliothèque standard

Deno fournit une bibliothèque standard – librement basée sur Golang – qui fournit un ensemble de modules standard de haute qualité sans dépendances externes.

Les packages de la bibliothèque standard ne sont pas installés avec Deno. Ils sont plutôt disponibles en ligne et liés à, comme nous l'avons vu dans la section précédente. Les modules sont versionnés, vous permettant d'épingler votre code à l'utilisation d'une version spécifique:

 import {copie} de "https://deno.land/std@0.50.0/fs/copy.ts";

Cela signifie que tout code que vous écrivez et qui s'appuie sur un module de la bibliothèque standard devrait continuer à fonctionner dans les versions futures.

La bibliothèque comprend divers assistants et utilitaires dont vous pourriez avoir besoin pour construire à la fois en ligne de commande et sur HTTP applications:

  • archive : modules pour travailler avec des fichiers tar
  • async : utilitaires async
  • octets : aides pour travailler avec des tableaux binaires
  • datetime : un assistant pour analyser les chaînes de date en objets date
  • encodage : encodeurs pour gérer les formats base32, binaire, CSV, TOML et YAML
  • drapeaux : analyseur d'arguments de ligne de commande [19659010] fmt : un outil pour imprimer une sortie formatée
  • fs : des aides pour travailler avec le système de fichiers
  • hachage : un module pour créer des hachages à l'aide d'une variété d'algorithmes
  • http : créer des serveurs HTTP et de fichiers et manipuler des cookies
  • io : utilitaires pour les entrées / sorties de chaînes
  • log : module de journalisation simple
  • mime : prend en charge les données en plusieurs parties
  • noeud : une couche de compatibilité (actuellement en cours) pour le code Node.js
  • chemin : utilitaire de manipulation de chemin
  • autorisations : aides pour vérifier et demander des autorisations de sécurité
  • signal : aides pour la gestion des signaux de processus Deno
  • tests : assertions de test à utiliser avec le lanceur de test intégré de Deno
  • uuid : utilitaires de génération et de validation des UUID
  • ws : aides à la création de clients et serveurs WebSocket

Installation de Deno

Installation de Deno [19659004] Deno est livré comme un exécutable unique sans dépendances. Vous pouvez télécharger un binaire à partir de la page des versions ou l'installer à l'aide des programmes d'installation ci-dessous:

Shell (macOS, Linux):

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

PowerShell (Windows):

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

Homebrew (macOS):

 brew install deno

Mise à niveau

Une fois installé, Deno peut également se mettre à niveau vers la dernière version, à l'aide de la commande suivante:

 deno upgrade

Ou, vous pouvez mettre à niveau / rétrograder vers une version spécifique:

 deno upgrade --version 1.0.1

L'avenir est brillant

Le manuel Deno suggère qu'il «est un excellent remplacement pour les scripts utilitaires qui peuvent avoir été historiquement écrits avec Bash ou Python». Bien que cela soit certainement vrai, je m'attendrais à le voir de plus en plus utilisé pour les mêmes cas d'utilisation où Node.js est actuellement populaire. Il existe déjà un certain nombre de cadres de type Express / Koa qui vous permettent de créer des API REST de type sécurisé, ainsi qu'un nombre croissant de modules tiers devenant disponibles.

Donc, si vous oubliez Node.js et commencer à apprendre Deno? L'opinion actuelle dans l'industrie est que Node.js n'est pas sur le point de disparaître de sitôt, mais Deno est définitivement une technologie à surveiller.



Source link

0 Partages