In den Repositories von Ubuntu, Debian und Raspbian ist Node.js zwar vorhanden, jedoch sind dies meistens keine aktuellen Versionen.

Zur Installation einer aktuellen Version gibt es drei Möglichkeiten, welche im Folgenden beschrieben werden.

Unabhängig von der verwendeten Installationsmethode müssen wir zunächst die gegebenenfalls installierte veraltete Version von Node.js vom System entfernen:

sudo apt-get remove nodejs
sudo apt-get autoremove
sudo apt-get autoclean

Installation mittels Node Version Manager (nvm)

Der Node Version Manager (nvm) ist ein Script, welches es sher komfortabel ermöglicht schnell und einfach eine oder auch mehrere Versionen von Node.js zu installieren und zu verwalten.

Die Installation von nvm erfolgt einfach über den folgenden Befehl:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Dieses Installationsscript läd die benötigten Dateien von GitHub herunter und fügt die benötigten Einträge in beispielsweise der Datei ~/.bashrc hinzu.

Zum Installieren von Node.js wird anschließend nvm install mit der gewünschten Node.js Version aufgerufen.

nvm install 10

Mit nvm ist es auch möglich mehrere Node.js Versionen parallel zu installieren. Hierzu wird einfach nvm install mehrfach mit der jeweligen Version aufgerufen. Die entsprechend aktuell zu verwende Version kann dann jederzeit mittels nvm use ausgewählt werden.

nvm install 4
nvm use 4
node -v
# v4.9.1
nvm use 10
node -v
# v10.16.3

Nachteil dieser Installationsmethode ist, dass Node.js damit nur dem aktuellen Benutzer zur Verfügung steht und es bei der Verwendung von unterschiedlichen Nutzern für verschiedene Programme zu etwas umständlicheren Konstelationen kommen kann.


Installation über das NodeSource-Repository

Dies ist eine einfache und zugleich sichere Methode zur Installation. Hierbei wird das Repository von NodeSource verwendet und alle Updates werden wie gewohnt über den Paketmanager installiert.

Abhängig von der gewünschten Version rufen wir einen der folgenden Befehle auf. Das Setup-Script erkennt dabei automatisch das verwendete Betriebssystem und richtet die Paketquellen dementsprechend ein.

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -

Anschließend installieren wir Node.js und die Build-Tools, welche zur Installation von Node.js Modulen mit nativen Addons benötigt werden.

sudo apt-get install -y nodejs build-essential

Probleme beim Installieren von globalen Modulen

Bei der Installation von gobalen Modulen (-g bzw. --global) kann es zu EACCESS-Fehlern, also Berechtigungsfehlern kommen. Selbst sudo hilft hier wenig und sollte in diesem Fall eh nicht verwendet werden.

Als Lösung wird in der offiziellen Dokumentation empfohlen das Standardverzeichnis für npm zu ändern.

Hierfür legen wir zuerst in eigenen Home-Verzeichnis ein neues Verzeichnis an, sofern dies nicht bereits existiert:

 mkdir -p ~/.npm-global

Anschließend wird npm so konfiguriert, dass es dieses Verzeichnis für gobale Module verwendet:

npm config set prefix '~/.npm-global'

Damit die Module in einer Shell auch gefunden werden, wird ein entsprechender Eintrag am Ende der Datei ~/.profile hinzugefügt und die Änderungen anschließend in die aktuelle Shell übernommen:

echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.profile
source ~/.profile

Das war’s dann auch schon. 🙂


Manuelle Installation

Zur manuellen Installation ist es zunächst entscheidend, sich über die offizielle Downloadseite von Node.js die zur Plattform passende Variante herunterzuladen.

  1. Auf einem normalen Ubuntu oder Debian System ist dies von den Linux Binaries (x86/x64) die 32-bit oder 64-bit Variante.
  2. Auf einem Raspberry Pi ist dies von den Linux Binaries (ARM) entweder die ARMv6 (Raspberry Pi A/A+/B/B+/Zero/ZeroW)  oder ARMv7 (Raspberry Pi 2B/3B) Variante.

Im folgenden Beispiel verwenden wir ARMv7 von Node.js 10.16.3.

cd /tmp
wget https://nodejs.org/dist/v10.16.3/node-v10.16.3-linux-armv7l.tar.xz
tar -xvf node-v10.16.3-linux-armv7l.tar.xz
sudo mv node-v10.16.3-linux-armv7l /opt/
sudo ln -s /opt/node-v10.16.3-linux-armv7l /opt/node
sudo chown -R root:root /opt/node*
sudo ln -s /opt/node/bin/node /usr/bin/node
sudo ln -s /opt/node/bin/npm /usr/bin/npm

Damit ist Node.js dann installiert und Befehle node sowie npm sind global verfügbar.

Es empfiehlt sich auch noch das Verzeichnis /opt/node/bin der PATH-Variable hinzuzufügen, damit global installierte Node.js Module (wie beispielsweise TypeScript) automatisch global in jeder Shell verfügbar werden. Hierfür rufen wir einfach den folgenden Befehl auf, welcher die Datei /etc/profile.d/nodejs.sh anlegt und damit bei jedem Login eines Benutzer den Pfad automatisch erweitert.

echo PATH=\$PATH:/opt/node/bin | sudo tee /etc/profile.d/nodejs.sh > /dev/null

Damit ist dann auch die manuelle Installation abgeschlossen. Zu beachten bleibt noch, dass keine automatischen Updates erfolgen.