It’s #FrontendFriday – Node.js deprecated durch Deno?

21.05.2021

In unseren #FrontendFriday Beiträgen behandeln wir nicht nur reine Frontend Themen, sondern auch generell alles in Bezug zu JavaScript. In diesem Beitrag blicken wir hinter das Frontend und betrachten, ob die neue Runtime „Deno“ in Zukunft Node.js ablösen wird.

Quelle: Logo Deno
[1]

Was ist Deno?

Ryan Dahl, der Erfinder von Node.js, hat mit seinem Team ein neues Projekt erstellt. Deno soll darauf abzielen, effizienter zu sein  und die „Schwachstellen“ des Vorgängers zu beheben.  Das Ziel ist außerdem, eine moderne Entwicklungsplattform zu schaffen, die Werkzeuge für den gesamten Softwareentwicklungsprozess enthält wie: Testing, Code-Formatierung, Versionierung und Dokumentation.

Beide Platt­formen haben ein ­ähnliches Ziel: Sie möchten dabei unterstützen, JavaScript Anwendungen zu erstellen, die außerhalb des ­Webbrowsers – im Backend – laufen. Wie auch Node.js basiert Deno auf der V8-Javascript-Engine und bietet eine Runtime für JavaScript und TypeScript.

Besonderheiten

Deno möchte mit einigen Punkten einen anderen Weg als Node.js einschlagen und versucht damit besonders hervorzustechen.

Sicherheit

JavaScript bietet in der Regel keinen direkten Zugriff auf das Dateisystem eines Rechners. Node.js ermöglicht dies jedoch, was auch eine Kehrseite mit sich bringt. Dieser uneingeschränkte Zugriff eröffnet ein Risiko. Deno lässt sich über ein Befehlszeilenflag ‚–allow-net‘ steuern, um den Zugriff auf das Dateisystem zu erlauben. Weitere Sicherheitsfunktionen können ebenfalls über ein Befehlszeilenargument aktiviert bzw. deaktiviert werden. Verschiedene Flags als Teil der Befehlszeile führen das Skript aus und stellen die für den Code erforderlichen Berechtigungen bereit. Sofern nicht klar und anders angegeben, kann Deno ohne Erlaubnis nicht auf die Festplatte zugreifen oder potenziell böswillige Aktionen ausführen.

Paketverwaltung

Node.js bietet npm – ein zentrales Repository – zur Verwaltung aller Pakete (CommonJS). Deno geht hier einen anderen Weg. Pakete werden direkt von einer URL installiert, indem diese im Skript als Import eingetragen werden (ES Modules). Dadurch gibt es keine ‚package.json‘ zur Verwaltung von Abhängigkeiten und auch keinen ’node_modules‘ Ordner. Dadurch ist es nicht erforderlich, ein eigenes zentrales Repository zu haben. Pakete bzw. Module können somit auf jedem beliebigen Server gehostet werden. Dieser Punkt ist jedoch sehr umstritten, da der Import von Modulen aus Quellen von Drittanbietern die Sicherheitsanfälligkeit drastisch erhöht.

Hauptunterschiede zu Node.js

Denos Kern ist in der Programmiersprache Rust (Schwerpunkt Sicherheit) und Tokio geschrieben. Node.js ist in C bzw. C ++ entwickelt worden. Typescript ist eine Obermenge von JavaScript, die darauf abzielt, die Entwicklungsfehler vor der Codeausführung zu beseitigen. Zu dem bietet Typeskript mehr Typsicherheit, was sich besser eignet für große Anwendungen. Typescript ist bei Deno ein built-in feature, was bei Node nicht der Fall ist. Ein ­großer Teil der Node.js-API basiert auf Callbacks. Bei der Entwicklung von Deno wurde besonders darauf geachtet, keine Callbacks mehr zu verwenden, sondern Promises und den async/await-Mechanismus. Da es keinen zentralen Paketmanager wie npm gibt und es auch keine package.json Datei bzw. keinen node_modules Ordner gibt, werden Abhängigkeiten über ES6-Importanweisungen verwaltet. Node hat die Eigenschaft bei nicht behandelten Exceptions einfach weiter zu laufen, wohingegen Deno an dieser Stelle ein Programmabbruch ausführt.

 

Fazit – Wird Deno Node.js ablösen?

Node.js hat eine sehr große Community, ein starkes Ökosystem und ist seit vielen Jahren am Markt. Deno befindet sich noch im Anfangsstadium und wird Zeit brauchen, um sich zu beweisen und aufzuholen. Deno verfolgt mit seinen Unterschieden zu Node.js einen interessanten Ansatz, ist dadurch jedoch auch umstritten. Angesichts der Popularität von Node.js wird es für Deno schwer, diese Technologie in Frage zu stellen. Sobald Deno mehr gewachsen ist, könnte es eine Alternative zu Node.js sein, eine Ablösung ist nach aktueller Sicht jedoch eher unwahrscheinlich.

 

Mehr über Frontend Entwicklung erfahren


Quelle:

[1] Von Kevin Qian – Eigenes Werk: Deno · GitHub

[2] MIT: https://commons.wikimedia.org/w/index.php?curid=80192000

Zurück zur Übersicht

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*Pflichtfelder

*