Node.js

Logo von node.js

Node.js ist eine bei Entwicklern beliebte JavaScript-Laufzeitumgebung für Netzwerk-Anwendungen, die Event-basiert arbeitet – nicht anders als in einem Browser ausgeführtes JavaScript. Node.js dagegen läuft – wie beispielsweise PHP – auf dem Server und liefert zu diesem Zweck auch gleich einen Webserver mit. Anders als PHP, das für jede Anfrage einen eigenen CPU-Thread verwendet und solange blockiert, bis die Anfrage beantwortet wird, arbeitet Node.js asynchron („non-blocking I/O“) über einen „Event loop“ in einem einzigen Thread und geht somit sparsamer und effizienter mit den Server-Ressourcen um – weshalb auch PHP inzwischen ansynchrone Erweiterungen erhalten hat.

Darüber hinaus bringt Node.js den Paketmanager npm mit, der wiederum Zugriff auf ein regelrechtes Universum an JavaScript-Paketen liefert, die „npm registy“, mit deren Hilfe sich alle erdenklichen Aufgaben lösen lassen. Klingt nach der eierlegenden Wollmilchsau für JavaScript-Programmierer.

Doch Ende 2014 zogen Gewitterwolken am Himmel auf, als führende Entwickler aus Unzufriedenheit über den Node.js-Sponsor Joyent eine Abspaltung namens io.js ins Leben riefen. Seit Version 4 sind beide Projekte aber wieder vereint, und eine Stiftung kümmert sich um den Fortbestand von Node.js.

Die Selbstbedienung aus der sprudelnden Paketquelle birgt aber auch Gefahren. So gab es Einzelfälle von kompromittierten Paketen, und Ende 2021 wurde eine Sicherheitslücke gestopft, die vermutlich seit Jahren unentdeckt geblieben war. Anfang 2022 sabotierte der Entwickler der populären Bibliotheken faker.js und colors.js seine eigenen Pakete, um dagegen zu protestieren, dass große Firmen seinen Code verwenden, ohne dafür zu zahlen.

Trotz allem: Node und seine inzwischen von Github und damit Microsoft betriebene Paketquelle sind in der ansonsten eher schnelllebigen JavaScript-Welt nach wie vor so populär, dass auch Anwendungen, die Node überhaupt nicht benötigen, inzwischen darüber installiert werden. Beispiele: Die Frontend-Frameworks ReactJS und AngularJS.

Veröffentlichungsweise

Neue Versionen von Node.js erscheinen alle sechs Monate und gelten dann für sechs Monate als aktuell („current“). Gerade Versionsnummern erhalten darüber hinaus einen langfristigen Support (LTS) von 30 Monaten, insgesamt also eine Lebensdauer von drei Jahren.

Ubuntu 22.04 lieferte bei Erscheinen immer noch die betagte LTS-Version 12 aus, während auf der Homepage von Node.js bereits Version 16 als aktuelle LTS-Version aufgeführt ist.

Installation

Nodejs lässt sich schnell aus den Ubuntu-Paketquellen besorgen:

sudo apt install nodejs

Das installiert die aktuelle LTS-Version, allerdings ohne Support direkt von Ubuntu, denn das Paket liegt lediglich im Universe-Repository.

Um jederzeit eine aktuelle Version zu beziehen, gibt es drei Möglichkeiten:

  • Das Repository von Nodesource als zusätzliche Paketquelle eintragen und node.js bequem per apt installieren und updaten.
  • Mit dem Node Version Manager (nvm), einem Bash-Script, eine oder mehrere Node-Versionen herunterladen und parallel betreiben.
  • Die gewünschte Version direkt von der Node.js-Downloadseite händisch herunterladen und installieren.

In der Dokumentation von npm wird  die Intsllation mit nvm empfohlen, um zu verhindern, dass npm in einem lokalen Kontext installiert wird, so dass es zu Fehlern kommen kann, wenn Pakete global ausgeführt werden sollen.

Trotzdem sei hier beispielhaft die Einrichtung der Nodesource-Quelle mit Hilfe eines von dort bereitgestellten Scriptes für die LTS-Version 16 dargestellt:

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install nodejs npm