Node.js
Node.js ist eine bei Entwicklern beliebte JavaScript-Laufzeitumgebung für Netzwerk-Anwendungen, die Event-basiert arbeitet. Während JavaScript typischerweise beim Client in einem Browser ausgeführtwird, läuft Node.js – 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.
npm und die Hölle der Abhändigkeiten
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, kann aber auch direkt in die sogenannte „dependeny hell“ führen.
Auch 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.
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.
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; sie gelten zunächst für zwölf Monate als aktiv („aktive“) und sind danach noch 18 Monate in Wartung („maintenance“).
Unter dem Strich: Nur Veröffentlichungen mit gerade Versionsnummern sollten produktiv eingesetzt werden und können nach einem Jahr mit der nächsten geraden Versionsnummer ersetzt werden oder noch eineinhalb Jahre mit Support weiterbetrieben werden.
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.
Hier sei beispielhaft die Einrichtung der Nodesource-Quelle mit Hilfe eines von dort bereitgestellten Scriptes für die derzeit aktive LTS-Version 22 dargestellt, die für Ubuntu 24.04 LTS zu spät erschien:
curl -sL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install nodejs