Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: AnfängerfehlerEACCES: permission denied

npm EACCES: permission denied beheben

npm install -g bricht mit 'EACCES: permission denied' ab? Nicht sudo verwenden. So installierst du globale Pakete korrekt über nvm oder ein eigenes Prefix.

Aufwand:
ca. 10 Min.
Voraussetzung:
sudo-Rechte, Terminal

Das Symptom

Du willst schnell ein globales Tool installieren, tippst npm install -g – und npm bricht mit einem roten npm ERR! code EACCES ab, gefolgt von „permission denied“ und einem Pfad wie /usr/lib/node_modules. Der Reflex liegt nahe: einfach sudo davorsetzen. Und schon beginnt der Ärger.

Die „Layer 8“-Wahrheit

EACCES ist keine Schikane, sondern das Betriebssystem, das seinen Job macht. Globale npm-Pakete wollen standardmäßig in ein Systemverzeichnis schreiben, das nur Root gehört – und dein normaler Benutzer darf das zu Recht nicht. Der scheinbar naheliegende Ausweg sudo ist genau der falsche: Er lässt fremden Paket-Code als Root laufen und verstreut Dateien mit Root-Rechten, die dein späteres npm dann selbst nicht mehr anfassen kann – ein Teufelskreis aus immer mehr sudo. Die richtige Lösung dreht das Problem um: Node so einrichten, dass globale Pakete im eigenen Home-Verzeichnis landen. Dann verschwindet EACCES nicht durch mehr Rechte, sondern weil gar keine erhöhten Rechte mehr nötig sind.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Nicht mit sudo weitermachen

    Der erste Schritt ist ein Verzicht: 'sudo npm install -g' vermeiden. Es übertüncht das Problem und hinterlässt oft Dateien, die deinem Benutzer nicht mehr gehören und späteres npm zusätzlich stören.

  2. 2.

    Node über einen Versionsmanager installieren

    Der sauberste Weg: nvm installiert Node komplett in dein Home-Verzeichnis. Globale Pakete landen dann automatisch dort, wo du schreiben darfst – ganz ohne Root:

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

    Alternativ ein eigenes npm-Prefix setzen

    Ohne nvm lässt sich das Zielverzeichnis für globale Pakete auf einen Ordner im Home umbiegen und in den PATH aufnehmen:

    npm config set prefix ~/.npm-global
    export PATH=~/.npm-global/bin:$PATH
    
  4. 4.

    Kaputte Rechte aus früherem sudo reparieren

    Wurde schon einmal mit sudo installiert, gehören Teile des npm-Caches jetzt Root. Die Eigentümerschaft zurück auf deinen Benutzer holen, damit npm wieder ohne Fehler arbeitet:

    sudo chown -R $(whoami) ~/.npm
    
  5. 5.

    Installation ohne sudo gegenprüfen

    Zum Schluss testen, dass ein globales Paket jetzt ohne Root durchläuft. Klappt es, ist die Umgebung dauerhaft in Ordnung:

    npm install -g <paket>
    

Häufige Fragen (FAQ)

?Warum EACCES bei npm install -g?

Globale Pakete landen standardmäßig in einem systemweiten Ordner wie /usr/lib/node_modules, in den dein normaler Benutzer nicht schreiben darf. npm meldet deshalb EACCES – fehlende Berechtigung. Das ist kein Bug, sondern der Schutz des Systemverzeichnisses vor Schreibzugriffen ohne Adminrechte.

?Ist sudo npm install -g nicht die einfachste Lösung?

Es ist die verlockendste und zugleich schlechteste. sudo lässt npm als Root schreiben und Skripte ausführen, kann Dateirechte durcheinanderbringen und ist ein Sicherheitsrisiko. Besser ist, Node so einzurichten, dass globale Pakete im eigenen Benutzerordner liegen – dann braucht es nie wieder Root.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler