15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
08.10.2024

Wie man NVM für Node.js auf Ubuntu installiert: Vollständige technische Anleitung

NVM (Node Version Manager) ist ein POSIX-konformes Shell-Skript, das mehrere isolierte Node.js-Laufzeitumgebungen auf einem einzelnen Rechner installiert und verwaltet, ohne Root-Rechte zu benötigen oder systemweite Pfade zu ändern. Jede Node.js-Version befindet sich in einem eigenen Verzeichnis unter `~/.nvm/versions/node/`, was eine vollständige, konfliktfreie Isolation zwischen Projekten gewährleistet.

Diese Anleitung führt durch eine produktionsreife NVM-Installation auf Ubuntu (20.04, 22.04 und 24.04) und behandelt nicht nur die grundlegenden Befehle, sondern auch Shell-Profil-Sonderfälle, `.nvmrc`-Workflow-Automatisierung, Migration globaler Pakete und serverspezifische Fallstricke, die die meisten Tutorials auslassen.

Warum NVM statt dem System-Paketmanager

Die Installation von Node.js über `apt` platziert eine einzelne, systemweite Binärdatei unter `/usr/bin/node`. Ein Upgrade davon betrifft alle Anwendungen auf dem Host gleichzeitig. Auf einem gemeinsam genutzten Entwicklungsrechner oder einem VPS, auf dem mehrere Node.js-Projekte laufen, entstehen dadurch fragile, schwer reproduzierbare Umgebungen.

NVM löst dieses Problem, indem es jede Node.js-Version in ein Benutzerverzeichnis installiert und `PATH` auf Shell-Ebene manipuliert. Das Ergebnis ist eine benutzer- und projektbezogene Versionskontrolle ohne jegliche Auswirkungen auf den Paketstatus des Betriebssystems.

NVM vs. andere Node.js-Versionsmanager

FunktionNVMfnmVoltan
SpracheShell (Bash/Zsh)RustRustShell
GeschwindigkeitModeratSehr schnellSehr schnellSchnell
`.nvmrc`-UnterstützungJaJaTeilweiseNein
Projektbezogenes PinningJaJaJaNein
Windows-UnterstützungNein (nur WSL)JaJaNein
Isolation globaler PaketeJaJaJaNein
Shell-Startaufwand~70ms~5ms~5msMinimal
Reife / ÖkosystemHöchsteHochMittelHoch

NVM bleibt die am besten dokumentierte und vom Ökosystem am stärksten unterstützte Option und ist damit die sicherste Standardwahl für Teams und Serverumgebungen, in denen Reproduzierbarkeit wichtiger ist als reine Startgeschwindigkeit.

Voraussetzungen

  • Ubuntu 20.04, 22.04 oder 24.04 (Desktop oder Server)
  • Ein Nicht-Root-Benutzerkonto mit `sudo`-Rechten
  • `curl` oder `wget` installiert (beide sind auf den meisten Ubuntu-Images standardmäßig vorhanden)
  • Grundlegende Kenntnisse in Bash oder Zsh

So überprüfen Sie Ihre Shell und Ubuntu-Version vor dem Start:

“`bash

echo $SHELL

lsb_release -a

“`

Schritt 1: System-Paketindex aktualisieren

Aktualisieren Sie die APT-Paketlisten, um sicherzustellen, dass alle während der Sitzung aufgelösten Abhängigkeiten aktuell sind:

“`bash

sudo apt-get update && sudo apt-get upgrade -y

“`

Bestätigen Sie außerdem, dass `curl` verfügbar ist:

“`bash

curl –version || sudo apt-get install -y curl

“`

Schritt 2: NVM-Installationsskript herunterladen und ausführen

Das offizielle NVM-Installationsprogramm wird auf GitHub gehostet. Es klont das NVM-Repository in `~/.nvm` und fügt den notwendigen Shell-Initialisierungsblock an Ihre Profildatei an.

Option A — Mit curl (empfohlen):

“`bash

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

“`

Option B — Mit wget:

“`bash

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

“`

Überprüfen Sie stets den neuesten Release-Tag auf der NVM-GitHub-Releases-Seite, bevor Sie den Befehl ausführen. Ersetzen Sie `v0.40.1` durch den aktuellen stabilen Tag, falls eine neuere Version veröffentlicht wurde.

Was das Installationsprogramm tatsächlich tut:

  1. Klont das NVM-Repository nach `~/.nvm`
  2. Erkennt Ihre aktive Shell (`bash`, `zsh`, `ksh` oder `fish`)
  3. Fügt den folgenden Initialisierungsblock an die entsprechende Profildatei an (`~/.bashrc`, `~/.zshrc`, `~/.profile` oder `~/.bash_profile`)

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"

“`

Sicherheitshinweis: Das direkte Weiterleiten eines Remote-Skripts an `bash` ist ein gängiges Muster, birgt jedoch inhärente Risiken. Für Produktionsserver oder Dedicated-Server-Umgebungen laden Sie das Skript zunächst herunter, prüfen Sie es und führen Sie es dann aus:

“`bash

curl -o install_nvm.sh https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh

cat install_nvm.sh # review before running

bash install_nvm.sh

“`

Schritt 3: NVM in der aktuellen Shell-Sitzung aktivieren

Das Installationsprogramm ändert Ihr Profil, aber diese Änderungen treten erst in neuen Shell-Sitzungen in Kraft. Um NVM sofort zu aktivieren, ohne ein neues Terminal zu öffnen:

Für Bash:

“`bash

source ~/.bashrc

“`

Für Zsh:

“`bash

source ~/.zshrc

“`

Manuelles Sourcing (funktioniert in jeder Shell):

“`bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

“`

Häufiger Fallstrick: Profildatei wird in nicht-interaktiven Shells nicht geladen

Unter Ubuntu wird `~/.bashrc` nur für interaktive Nicht-Login-Shells geladen. Wenn Sie sich über SSH verbinden (eine Login-Shell), liest Bash stattdessen `~/.bash_profile` oder `~/.profile`. Falls NVM nach dem SSH-Login nicht gefunden wird, fügen Sie den Sourcing-Block zu `~/.bash_profile` hinzu:

“`bash

echo 'source ~/.bashrc' >> ~/.bash_profile

source ~/.bash_profile

“`

Dies ist eines der am häufigsten auftretenden Probleme bei der Konfiguration von NVM auf Remote-Servern.

Schritt 4: NVM-Installation überprüfen

“`bash

nvm –version

“`

Erwartete Ausgabe (Versionsnummer kann variieren):

“`

0.40.1

“`

Wenn der Befehl `nvm: command not found` zurückgibt, wurde das Shell-Profil nicht korrekt geladen. Führen Sie den Sourcing-Befehl aus Schritt 3 erneut aus und überprüfen Sie, ob der Initialisierungsblock in Ihrer Profildatei vorhanden ist:

“`bash

grep -n 'NVM_DIR' ~/.bashrc

“`

Schritt 5: Node.js mit NVM installieren

Neueste LTS-Version installieren (für Produktion empfohlen)

“`bash

nvm install –lts

“`

Das Flag `–lts` installiert die neueste Long-Term-Support-Version, die 30 Monate lang Sicherheits-Patches erhält. Für Produktions-Workloads auf einem VPS mit cPanel oder in jeder Serverumgebung wird LTS gegenüber der aktuellen Version deutlich bevorzugt.

Absolut neueste Version installieren

“`bash

nvm install node

“`

Eine bestimmte Version installieren

“`bash

nvm install 20.14.0

“`

Alle verfügbaren Remote-Versionen auflisten

“`bash

nvm ls-remote

“`

Nur LTS-Versionen filtern:

“`bash

nvm ls-remote –lts

“`

Schritt 6: Aktive Node.js- und npm-Versionen überprüfen

“`bash

node -v

npm -v

“`

Bestätigen Sie außerdem den Binärpfad, um sicherzustellen, dass Sie nicht versehentlich eine systemweite Node.js-Installation verwenden:

“`bash

which node

Expected: /home/<username>/.nvm/versions/node/v20.14.0/bin/node

“`

Schritt 7: Mehrere Node.js-Versionen verwalten

Alle lokal installierten Versionen auflisten

“`bash

nvm ls

“`

Beispielausgabe:

“`

-> v20.14.0

v18.20.3

v16.20.2

default -> lts/* (-> v20.14.0)

node -> stable (-> v20.14.0) (default)

lts/* -> lts/iron (-> v20.14.0)

“`

Zwischen Versionen wechseln

“`bash

nvm use 18.20.3

“`

Diese Änderung gilt nur für die aktuelle Terminal-Sitzung. Das Öffnen eines neuen Terminals kehrt zum Standard-Alias zurück.

Prüfen, welche Version aktuell aktiv ist

“`bash

nvm current

“`

Schritt 8: Persistente Standard-Node.js-Version festlegen

Um eine bestimmte Version als Standard für alle neuen Shell-Sitzungen festzulegen:

“`bash

nvm alias default 20.14.0

“`

Sie können auch einen Alias auf eine Release-Linie statt auf eine bestimmte Patch-Version setzen, wodurch Updates innerhalb dieser Linie automatisch verfolgt werden:

“`bash

nvm alias default lts/*

“`

Schritt 9: Versionswechsel mit `.nvmrc` automatisieren

Dies ist eine der leistungsstärksten und am wenigsten genutzten Funktionen von NVM. Platzieren Sie eine `.nvmrc`-Datei im Stammverzeichnis Ihres Projekts, die die erforderliche Node.js-Version enthält:

“`bash

echo "20.14.0" > /path/to/your/project/.nvmrc

“`

Wenn Sie dann mit `cd` in dieses Verzeichnis wechseln:

“`bash

nvm use

Found '/path/to/your/project/.nvmrc' with version <20.14.0>

Now using node v20.14.0

“`

Automatischer Versionswechsel beim Verzeichniswechsel

Fügen Sie Folgendes zu Ihrer `~/.bashrc` (oder `~/.zshrc`) hinzu, um `nvm use` automatisch auszulösen, wenn Sie ein Verzeichnis mit einer `.nvmrc`-Datei betreten:

Für Bash:

“`bash

cdnvm() {

command cd "$@" || return $?

nvm_path="$(nvm_find_up .nvmrc | command tr -d 'n')"

if [[ ! $nvm_path = *[^[:space:]]* ]]; then

declare default_version

default_version="$(nvm version default)"

if [[ $default_version == "N/A" ]]; then

nvm use default

elif [[ $(nvm current) != "$default_version" ]]; then

nvm use default

fi

elif [[ -r "$nvm_path/.nvmrc" && -r "$nvm_path" ]]; then

declare nvm_version

nvm_version=$(<"$nvm_path/.nvmrc")

declare locally_resolved_nvm_version

locally_resolved_nvm_version="$(nvm ls –no-colors "$nvm_version" | command tail -1 | command tr -d '->*' | command tr -d '[:space:]')"

if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then

nvm install "$nvm_version"

elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then

nvm use "$nvm_version"

fi

fi

}

alias cd='cdnvm'

“`

Dieses Muster ist besonders wertvoll in CI/CD-Pipelines und Team-Umgebungen, in denen mehrere Entwickler an Projekten mit unterschiedlichen Laufzeitanforderungen arbeiten.

Schritt 10: Globale npm-Pakete versionsübergreifend verwalten

Jede von NVM installierte Node.js-Version verfügt über ein eigenes isoliertes `node_modules`-Verzeichnis für global installierte Pakete. Das bedeutet, dass Tools wie `pm2`, `yarn` oder `typescript`, die global unter `v18` installiert wurden, unter `v20` nicht verfügbar sind.

Ein globales Paket für die aktive Version installieren

“`bash

npm install -g yarn

npm install -g pm2

npm install -g typescript

“`

Globale Pakete bei der Installation einer neuen Version migrieren

NVM bietet ein integriertes Flag, um alle globalen Pakete von einer Version in eine neue Installation zu kopieren:

“`bash

nvm install 20.14.0 –reinstall-packages-from=18.20.3

“`

Dies ist entscheidend beim Upgrade von Node.js-Versionen auf einem Server, auf dem persistente Prozesse von PM2 oder ähnlichen Tools verwaltet werden.

Global installierte Pakete für die aktuelle Version auflisten

“`bash

npm list -g –depth=0

“`

Schritt 11: Eine Node.js-Version deinstallieren

Wechseln Sie vor der Deinstallation von der Version weg, die Sie entfernen möchten:

“`bash

nvm use 20.14.0

nvm uninstall 16.20.2

“`

Sie können die aktuell aktive Version nicht deinstallieren. Der Versuch führt zu einer Fehlermeldung.

Erweitert: NVM in nicht-interaktiven Umgebungen verwenden (CI/CD, Cron, Systemd)

NVM ist auf Shell-Initialisierungsdateien angewiesen, die in nicht-interaktiven Shells nicht geladen werden. Dies verursacht `node: command not found`-Fehler in Cron-Jobs, systemd-Unit-Dateien und einigen CI-Umgebungen.

Lösung 1: Den vollständigen Binärpfad verwenden

“`bash

/home/username/.nvm/versions/node/v20.14.0/bin/node /path/to/app.js

“`

Lösung 2: NVM explizit in Skripten laden

“`bash

#!/bin/bash

export NVM_DIR="$HOME/.nvm"

[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

nvm use 20.14.0

node /path/to/app.js

“`

Lösung 3: Einen Symlink für systemweiten Zugriff erstellen (mit Vorsicht verwenden)

“`bash

sudo ln -s /home/username/.nvm/versions/node/v20.14.0/bin/node /usr/local/bin/node

“`

Dieser Ansatz opfert die benutzerbezogene Isolation, ist aber manchmal für systemd-Dienste notwendig, die als dedizierter Dienstbenutzer ausgeführt werden.

NVM auf Shared Hosting vs. VPS vs. Dedicated Servern

UmgebungNVM-EignungHinweise
Shared HostingNicht unterstütztKein Shell-Zugriff; plattformbereitgestelltes Node.js verwenden
[VPS Hosting](https://alexhost.com/vps/)AusgezeichnetVollständiger Shell-Zugriff; benutzerbezogene Isolation funktioniert einwandfrei
[Dedicated Servers](https://alexhost.com/dedicated-servers/)AusgezeichnetIdeal für Multi-Projekt-Umgebungen und CI-Runner
Docker-ContainerTeilweiseErwägen Sie stattdessen die Verwendung offizieller Node.js-Docker-Images
Shared Web HostingNicht unterstütztIn den meisten Konfigurationen kein SSH-Zugriff

Für Teams, die Node.js-Anwendungen neben anderen Diensten betreiben, bietet ein VPS die Shell-Kontrolle, die NVM benötigt, ohne den Aufwand der Verwaltung physischer Hardware.

Praktische Checkliste der wichtigsten Erkenntnisse

Verwenden Sie dies als Referenz für Deployment und Konfiguration:

  • Shell-Typ überprüfen (`echo $SHELL`) vor der Installation — Zsh und Bash benötigen unterschiedliche Profildateien
  • Immer `–lts` verwenden für Node.js-Produktionsinstallationen; `node` (neueste) für experimentelle Arbeiten reservieren
  • `.nvmrc` zur Versionskontrolle hinzufügen, damit jedes Teammitglied und jeder CI-Runner die identische Laufzeitversion verwendet
  • `–reinstall-packages-from` verwenden beim Upgrade von Node.js-Versionen, um die manuelle Neuinstallation globaler Tools zu vermeiden
  • NVM explizit laden in jedem nicht-interaktiven Skript (Cron, systemd, CI-Pipelines) — niemals davon ausgehen, dass das Shell-Profil geladen wurde
  • Globale Pakete pro Version prüfen mit `npm list -g –depth=0` nach dem Versionswechsel, um fehlende Abhängigkeiten frühzeitig zu erkennen
  • Exakte Versionen pinnen in `.nvmrc` (z. B. `20.14.0`) statt Aliase (z. B. `lts`) für maximale Reproduzierbarkeit in der Produktion
  • `which node` prüfen nach dem Versionswechsel, um zu bestätigen, dass Sie nicht versehentlich eine systeminstallierte Binärdatei verwenden

Häufig gestellte Fragen

Benötigt NVM sudo- oder Root-Zugriff zur Installation von Node.js?

Nein. NVM installiert alles unter `~/.nvm` im Home-Verzeichnis des aktuellen Benutzers. Für die Installation oder den Wechsel von Node.js-Versionen sind keine Root-Rechte erforderlich. Dies ist einer der Hauptvorteile gegenüber systemweiten Paketmanagern.

Warum erscheint `nvm: command not found` nach der Installation?

Der NVM-Initialisierungsblock wurde zu Ihrem Shell-Profil hinzugefügt, aber das Profil wurde in der aktuellen Sitzung nicht neu geladen. Führen Sie `source ~/.bashrc` (Bash) oder `source ~/.zshrc` (Zsh) aus. Wenn der Fehler nach dem Öffnen eines neuen Terminals weiterhin besteht, überprüfen Sie mit `grep NVM_DIR ~/.bashrc`, ob der Initialisierungsblock tatsächlich in die richtige Datei geschrieben wurde.

Können mehrere Benutzer auf demselben Server jeweils unterschiedliche Node.js-Versionen über NVM haben?

Ja. Da NVM in das Home-Verzeichnis jedes Benutzers installiert (`~/.nvm`), verfügt jeder Benutzer über einen vollständig unabhängigen Satz von Node.js-Versionen und globalen Paketen. Dies ist die korrekte Architektur für Multi-Tenant-Server.

Was passiert mit global installierten npm-Paketen, wenn ich mit NVM die Node.js-Version wechsle?

Jede Node.js-Version verfügt über ein eigenes isoliertes globales Paketverzeichnis. Pakete, die global unter einer Version installiert wurden, sind für eine andere nicht sichtbar. Verwenden Sie `nvm install <new-version> –reinstall-packages-from=<old-version>`, um sie automatisch zu migrieren.

Ist NVM für den Betrieb von Node.js-Anwendungen in der Produktion auf einem Server geeignet?

NVM eignet sich gut für die Verwaltung der verwendeten Node.js-Version, aber für das Prozessmanagement in der Produktion sollten Sie es mit einem Prozessmanager wie PM2 kombinieren oder systemd-Unit-Dateien verwenden. Stellen Sie sicher, dass diese nicht-interaktiven Umgebungen NVM explizit laden oder den vollständigen Binärpfad referenzieren, wie im CI/CD-Abschnitt oben beschrieben.

15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen