Node.js ist eine plattformunabhängige, Open-Source JavaScript Runtime, die es Entwicklern ermöglicht JavaScript Code serverseitig auszuführen. Node.js basiert auf der V8 JavaScript-Engine von Google und agiert deshalb vollkommen unabhängig eines Browsers. Damit erfüllt es den Backendanteil des JavaScript-Everywhere Paradigmas, welches sich immer größerer Beliebtheit erfreut. Node.js ist aufgrund seiner eventbasierten Architektur sehr beliebt für die Implementierung von Webservices. Dies wird weiterhin bestärkt durch die Tatsache, dass ausschließlich non-blocking I/O eingesetzt werden kann. All dies resultiert in ausgezeichneter Skalierbarkeit, was für Webservices eine essenzielle Eigenschaft ist.

Zusammen mit Node.js wurde auch der Node Package Manager (npm) entwickelt. Dieser erlaubt es Entwicklern die Abhängigkeiten ihrer Projekte deklarativ anzugeben und incl. Versionierung zu verwalten.
npm ist dabei nicht nur für Node.js-Projekte verwendbar. Es benötigt zwar eine aktive Installation von Node.js, da npm selbst in JavaScript geschrieben ist, es wird jedoch oft auch für Verwaltung von Abhängigkeiten in anderen JavaScript Projekten verwendet.

Was ist V8?

V8 ist eine JavaScript Engine, welche von Google Inc. unter der „BSD“-Lizenz veröffentlicht wurde. Die Engine ist in der Programmiersprache C++ geschrieben und implementiert die ECMAScript Spezifikation, die auch JavaScript zugrunde liegt. V8 kann als eigenständiges Programm oder eingebettet in C++ verwendet werden. Ein Vorteil der Engine ist ihre Browserunabhängigkeit, was stark zur Beliebtheit von Node.js beigetragen hat. Ein weiterer Anwendungsfall für V8 ist die Beschleunigung von JavaScript-Code. Dies geschieht über just-in-time Kompilierung, Inline Caching und Garbage Collection.

Was ist npm?

npm (Node Package Manager) ist ein Open-Source Paketmanager für Node.js. Ein Paket beinhaltet dabei alle Dateien für eine JavaScript Bibliothek. npm besteht im Wesentlichen aus drei Komponenten – der Webseite, der npm-Registry und der Schnittstelle zur Kommandozeile. Auf der Webseite befinden sich geteilte und veröffentlichte Pakete sowie paketrelevante Dokumente. Die npm-Registry ist eine Datenbank, die über 800.000 Pakete beinhaltet. Von dieser laden Entwickler die benötigten Pakete herunter bzw. veröffentlichen ihre Pakete. Die Schnittstelle zur Kommandozeile wird zum Installieren, Deinstallieren, Aktualisieren und Verwalten von Abhängigkeiten verwendet.

Wie funktioniert Event-Driven Architecture?

Eine ereignisgesteuerte Architektur besteht im Wesentlichen aus einem einzelnen Thread mit Hintergrundprozessen. Der Event-Thread hat die Aufgabe auf Events zu warten und diese zu verwalten. Dabei gibt es zwei Arten von Events: Aufgaben und Ergebnisse. Erkennt der Event-Thread eine Aufgabe, wird diese über eine Callback Funktion in einen Hintergrundprozess ausgelagert. Somit geschieht die Verarbeitung der Aufgabe nicht im Eventthread und dieser kann zum nächsten Event übergehen. Wurde eine ausgelagerte Aufgabe abgearbeitet, werden die Ergebnisse über einen weiteren Callback zurück in den Eventthread gesendet. Somit kann die Verarbeitung des Ergebnisses angestoßen werden.

Fazit:

Node.js ist ein exzellentes Projekt, das für jeden von Interesse sein sollte, der an skalierbaren Webservices oder der browserunabhängigen Ausführung von JavaScript interessiert ist.
Die um und mit Node.js entstandenen Tools und Bibliotheken sind vielseitig und werden weitreichend eingesetzt. Die Verwendung von JavaScript für den kompletten Stack einer Applikation minimiert außerdem den Entwicklungsaufwand und ermöglicht auch Junior Developern, flexibel über das gesamte Projekt hinweg zu arbeiten.