In unserem Projekt, der IDE für die Arbeit mit der TestMace- API, wird TypeScript als Hauptsprache verwendet, daher sind wir aktiv an Projekten interessiert, die sich auf diese Sprache beziehen. Heute ist Ihre Aufmerksamkeit eine Übersetzung eines Artikels über das Deno-Laufzeit-Tool für TypeScript (dies ist jedoch nicht die einzige Funktion). Viel Spaß beim Lesen.

Vor ungefähr drei Monaten hielt Ryan Dahl (Schöpfer von Node.js) auf der Konferenz eine Präsentation mit dem Titel „ 10 Dinge, die mir an Node.js leid tun “, in denen er über einige seiner erfolglosen Entwurfsentscheidungen für Node.js sprach. Fast die Hälfte seiner Rede widmete er dem experimentellen Prototyp Deno, dessen Aufgabe es war, die Mängel von Node.js zu beseitigen.
Deno hat bereits die Version v0.1 erreicht ( Anmerkung des Übersetzers - bereits v0.3.8 ) und ist auf dem richtigen Weg, um Node.js in Zukunft zu ersetzen.
Was ist los mit Node.js?
Jedes Programm kann Daten in ein Dateisystem oder Netzwerk schreiben
Dies kann zu einem Sicherheitsrisiko führen, insbesondere bei der Installation nicht verifizierter npm-Pakete. Zum Beispiel wie beim Crossenv- Vorfall . Wenn Crossenv keine Schreibberechtigung hätte, wäre dies nicht geschehen.
Schnell abgehende asynchrone APIs
Versprechen erschienen 2009 in Node.js und im Februar 2010 waren sie weg. Die meisten Bibliotheken verwenden jedoch weiterhin Rückrufe, um mit asynchronem Code zu arbeiten.
Build System (GYP)
Das Zusammenstellen eines Moduls zum Verbinden von Bibliotheken mit C über GYP ist eine Qual. Um eine angemessene Entwicklererfahrung zu erhalten, müssen Sie Node-Gyp (eine Schicht über GYP) und möglicherweise andere Schichten (wie Nan ) verwenden. Ich persönlich habe all das in meinem kleinen Projekt ausprobiert und bin bereit zuzustimmen, es hat mich ins Schwitzen gebracht.
Modulsystem und npm
Das Hauptproblem besteht darin, dass das Modulsystem nicht mit Browsern kompatibel ist, was bedeutet, dass der Code nicht vollständig isomorph ist. Dafür gibt es hauptsächlich zwei Gründe: Speichern von Abhängigkeiten in node_modules und Vorhandensein von package.json.
Was ist Deno?
"Deno ist eine TypeScript-Laufzeit, die auf der V8-Engine basiert."
- Ryan Dahl
Da Typescript eine erweiterte Version von Javascript ist, ist Deno auch eine Laufzeitumgebung für Javascript.
Deno ist ein neues Projekt von Ryan Dahl (Erfinder von Node.js), mit dem die oben diskutierten Designfehler von Node.js behoben werden sollen.
Hauptmerkmale von Deno
Sicherheit
Standardmäßig verbietet Deno vertrauliche Aktionen wie das Lesen von Umgebungsvariablen oder das Schreiben in das Dateisystem.
Der Deno-Prozess startet im nicht privilegierten Modus. Um auf Daten wie Umgebungsvariablen zugreifen zu können, müssen spezielle Flags übergeben werden.
Die Berechtigung zum Schreiben in das Dateisystem sowie die Berechtigungen für die Umgebung und das Netzwerk sind deaktiviert. Um diese Aktionen zu aktivieren, müssen Sie Deno mit den Argumenten --allow-write
und --allow-net
.
Die gesamte Interaktion zwischen dem privilegierten Deno-Prozess und v8 erfolgt über Messaging (zuvor in Go geschrieben, jetzt auf Rust portiert). Auf diese Weise können Sie einen einzelnen Punkt erstellen, um alle Nachrichten zu überprüfen.
Modulsystem
Vergessen Sie package.json und node_modules. Beim Importieren von Quelldateien können Sie entweder einen relativen oder einen absoluten Pfad oder deren vollständige URL angeben:
import { test } from "https://unpkg.com/deno_testing@0.0.5/testing.ts" import { log } from "./util.ts"
Standardmäßig werden alle Quelldateien zwischengespeichert. Mit dem Argument --reload können Sie Abhängigkeiten aktualisieren. Es funktioniert wie eine F5-Taste in einem Browser.
TypeScript-Unterstützung sofort verfügbar
TypeScript wird standardmäßig von Deno unterstützt. So ist das. Ohne Aber. Keine Konfigurationen.
Deno v0.1.4 in Aktion
Laden Sie zunächst die Deno-Binärdatei herunter:
$ mkdir deno-test && cd deno-test $ wget https://github.com/denoland/deno/releases/download/v0.1.4/deno_linux_x64.gz $ gunzip -c deno_linux_x64.gz > deno $ chmod u+x deno $ ./deno --version deno: 0.1.4 v8: 7.0.247-deno
Erstellen Sie nun eine Typoskriptdatei und führen Sie sie aus:
function hello(place: string): string { return `Hello ${place}` } console.log(hello('world'))
$ ./deno myscript.ts Hello world
Sie können auch versuchen, über eine URL zu importieren. Die einzige Voraussetzung ist, dass die Datei am Ende der URL die Erweiterung .ts hat.
import { factorial } from "https://gist.githubusercontent.com/DanielRamosAcosta/ad514503b1c7cf8290dadb96a5fddee9/raw/4733e267f05d20110ba962c4418bab5e98abfe93/factorial.ts" console.log(factorial(10))
$ ./deno myimport.ts Downloading https://gist.githubusercontent.com/DanielRamosAcosta/ad514503b1c7cf8290dadb96a5fddee9/raw/4733e267f05d20110ba962c4418bab5e98abfe93/factorial.ts 3628800
Während der Ausführung des Skripts wird das Modul geladen und dem Cache hinzugefügt. Um den Cache zu aktualisieren, können Sie Deno mit dem Argument --reload aufrufen, das der Aktion der Tasten F5 oder Strg + R entspricht.
Unten finden Sie ein komplexeres Beispiel für die Verwendung der Axios-Bibliothek:
import axios from "https://gist.githubusercontent.com/DanielRamosAcosta/2f773d815f5434f185c59aec1bab418c/raw/a442cdd8699e39ab9855cbaa571a79049a7b67d4/axios.ts"
Der einzige Haken ist, dass VSCode keine Eingaben aus der Ferne laden kann, sodass der folgende Fehler im Editor angezeigt wird:
An import path cannot end with a '.ts' extension.
Der Code funktioniert jedoch weiterhin und liefert das richtige Ergebnis:
./deno --allow-net axios-test.ts User name: Leanne Graham
Fazit
Deno wird viel Zeit brauchen, um sich zu einem vollwertigen Arbeitstool zu entwickeln, aber ich glaube, es entwickelt sich in die richtige Richtung und es hat jede Chance, eine ausgefeiltere Javascript-Laufzeit als Node.js zu werden.
Danke für die Aufmerksamkeit!