La plateforme JavaScript Deno est compatible avec les modules NPM

Deno 1.28 a été publié, un framework pour le sandboxing des applications JavaScript et TypeScript qui peut être utilisé pour créer des gestionnaires côté serveur. La plateforme est développée par Ryan Dahl, le créateur de Node.js. Comme Node.js, Deno utilise le moteur JavaScript V8, qui est également utilisé dans les navigateurs basés sur Chromium. En même temps, Deno n'est pas un fork de Node.js, mais un nouveau projet créé à partir de zéro. Le code du projet est distribué sous licence MIT. Les versions sont préparées pour Linux, Windows et macOS.

Le projet Deno a été créé pour offrir aux utilisateurs un environnement plus sécurisé et éliminer les erreurs conceptuelles dans l'architecture Node.js. Pour améliorer la sécurité, le moteur V8 est écrit en Rust, ce qui évite de nombreuses vulnérabilités résultant de la manipulation de la mémoire de bas niveau. Pour traiter les requêtes en mode non bloquant, la plateforme Tokio, également écrite en Rust, est utilisée. Tokio vous permet de créer des applications hautes performances basées sur une architecture basée sur les événements, prenant en charge le multithread et traitant les requêtes réseau en mode asynchrone.

Un changement clé dans la nouvelle version est la stabilisation de la compatibilité avec les packages hébergés dans le référentiel NPM, qui permet à Deno d'utiliser plus de 1.3 million de modules créés pour la plateforme Node.js. Par exemple, les applications basées sur Deno peuvent désormais utiliser des modules d'accès aux données persistants tels que Prisma, Mongoose et MySQL, ainsi que des frameworks frontaux tels que React et Vue. Certains modules NPM restent toujours incompatibles avec Deno, par exemple en raison de liaisons avec des éléments d'environnement spécifiques à Node.js tels que le fichier package.json. Il n'est pas non plus encore possible d'utiliser la commande "deno compile" avec les modules NPM. Les versions futures prévoient de résoudre ces incompatibilités et limitations.

La prise en charge du système de modules ECMAScript et du modèle d'API Web précédemment utilisés par Deno est conservée au même niveau, et le schéma de chargement basé sur l'URL familier de Deno est utilisé pour importer des modules NPM. Pour accéder aux modules NPM, il existe un préfixe d'URL spécial « npm : », qui peut être utilisé de la même manière que les modules Deno classiques. Par exemple, pour importer un module NPM, vous pouvez spécifier 'import { chalk } from "npm:chalk@5";', et exécuter un script NPM à partir de la ligne de commande - "deno run --allow-env --allow -read npm:create-vite-extra.

L'utilisation des packages NPM dans Deno est beaucoup plus simple que dans Node.js, car il n'est pas nécessaire de préinstaller les modules (les modules sont installés au premier lancement de l'application), il n'y a pas de fichier package.json et il n'y a pas de node_modules par défaut. répertoire (les modules sont mis en cache dans le répertoire partagé, mais il est possible de renvoyer l'ancien comportement en utilisant l'option « --node-modules-dir »).

Les applications basées sur NPM conservent la possibilité d'utiliser les capacités avancées de contrôle d'accès, d'isolation et de sécurité de Deno. Pour contrer les attaques via des dépendances douteuses, Deno bloque par défaut toutes les tentatives d'accès au système à partir de dépendances et affiche un avertissement sur les problèmes détectés. Par exemple, lorsqu'un module tente d'obtenir un accès en écriture à /usr/bin/, une demande de confirmation pour cette opération s'affichera : deno run npm:install-malware ⚠️ ┌ Deno demande un accès en écriture à /usr/bin/. ├ Demandé par `install-malware` ├ Exécutez à nouveau avec --allow-write pour contourner cette invite. └ Autoriser ? [o/n] (y = oui, autoriser ; n = non, refuser) >

Les améliorations non-NPM dans la nouvelle version incluent la mise à jour du moteur V8 vers la version 10.9, la détection automatique des fichiers avec des verrous, la stabilisation de Deno.bench(), Deno.gid(), Deno.networkInterfaces(), Deno.systemMemoryInfo() et les API Deno.uid(), ajoutant une nouvelle API instable Deno.Command() pour exécuter des commandes (remplacement universel de Deno.spawn, Deno.spawnSync et Deno.spawnChild).

Principales caractéristiques de Deno :

  • Configuration par défaut orientée sécurité. L'accès aux fichiers, la mise en réseau et l'accès aux variables d'environnement sont désactivés par défaut et doivent être explicitement activés. Les applications s'exécutent par défaut dans des environnements sandbox isolés et ne peuvent pas accéder aux fonctionnalités du système sans accorder d'autorisations explicites ;
  • Prise en charge intégrée de TypeScript au-delà de JavaScript. Pour la vérification de type et la génération JavaScript, le compilateur TypeScript standard est utilisé, ce qui entraîne une baisse des performances par rapport à l'analyse JavaScript dans la V8 ;
  • Le runtime se présente sous la forme d’un seul fichier exécutable autonome (« deno »). Pour exécuter des applications utilisant Deno, il vous suffit de télécharger un fichier exécutable pour votre plate-forme, d'une taille d'environ 30 Mo, qui n'a aucune dépendance externe et ne nécessite aucune installation particulière sur le système. Deno n'est pas une application monolithique, mais un ensemble de packages Rust crate (deno_core, rusty_v8), qui peuvent être utilisés séparément ;
  • Lors du démarrage du programme, ainsi que pour charger des modules, vous pouvez utiliser l'adressage URL. Par exemple, pour exécuter le programme Welcome.js, vous pouvez utiliser la commande « deno https://deno.land/std/examples/welcome.js ». Le code des ressources externes est téléchargé et mis en cache sur le système local, mais n'est jamais automatiquement mis à jour (la mise à jour nécessite d'exécuter explicitement l'application avec l'indicateur « --reload ») ;
  • Traitement efficace des requêtes réseau via HTTP dans les applications ; la plateforme est conçue pour créer des applications réseau hautes performances ;
  • La possibilité de créer des applications Web universelles qui peuvent être exécutées à la fois dans Deno et dans un navigateur Web classique ;
  • La présence d'un ensemble standard de modules dont l'utilisation ne nécessite pas de liaison à des dépendances externes. Les modules de la collection de normes ont subi un audit supplémentaire et des tests de compatibilité ;
  • En plus du runtime, la plateforme Deno fait également office de gestionnaire de packages et vous permet d'accéder aux modules par URL dans le code. Par exemple, pour charger un module, vous pouvez spécifier dans le code « import * as log from « https://deno.land/std/log/mod.ts ». Les fichiers téléchargés depuis des serveurs externes via une URL sont mis en cache. La liaison aux versions du module est déterminée en spécifiant les numéros de version dans l'URL, par exemple « https://unpkg.com/[email protected]/dist/liltest.js";
  • La structure comprend un système intégré d'inspection des dépendances (la commande « deno info ») et un utilitaire de formatage du code (deno fmt) ;
  • Tous les scripts d'application peuvent être combinés en un seul fichier JavaScript.

Source: opennet.ru

Ajouter un commentaire