So beheben Sie EACCES: Permission Denied in npm
Sie führen npm install -g aus, um ein CLI-Tool zu installieren, und statt einer sauberen Installation erhalten Sie dies:
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
Dieser npm EACCES-Fehler ist einer der häufigsten Node.js-Berechtigungsfehler, auf den Entwickler unter macOS und Linux stoßen. Hier erfahren Sie, warum er auftritt und wie Sie ihn richtig beheben.
Die wichtigsten Erkenntnisse
- Der EACCES-Fehler tritt auf, weil npm versucht, in ein Root-eigenes Verzeichnis wie
/usr/local/lib/node_moduleszu schreiben, auf das Ihr Benutzerkonto keinen Zugriff hat. - Die empfohlene Lösung ist die Installation von Node.js über einen Versionsmanager wie nvm, der alles in Ihrem Home-Verzeichnis ablegt.
- Alternativ können Sie npm so konfigurieren, dass es ein benutzereigenes globales Verzeichnis verwendet, indem Sie das Präfix ändern und Ihren PATH aktualisieren.
- Vermeiden Sie
sudo npm install -g— dies führt zu langfristigen Berechtigungsproblemen und Sicherheitsrisiken. - Für die einmalige CLI-Nutzung führt
npxPakete aus, ohne dass eine globale Installation erforderlich ist.
Warum npm-Berechtigungsfehler auftreten
Wenn Sie npm install -g ausführen, schreibt npm in ein systemweites Verzeichnis wie /usr/local/lib/node_modules. Wenn Sie Node.js mit einem offiziellen Installer oder einem Systempaketmanager installiert haben, gehört dieses Verzeichnis in der Regel root. Ihr normales Benutzerkonto hat darauf keinen Schreibzugriff, sodass die Installation fehlschlägt.
Dies ist ein Sicherheitsmerkmal Unix-basierter Systeme, kein Fehler. Die Lösung besteht nicht darin, diese Schutzmechanismen zu umgehen — sondern darin, npm einen Ort zuzuweisen, der bereits Ihrem Benutzer gehört.
Wichtige Unterscheidung: Dieser Artikel behandelt Berechtigungsfehler bei globalen Installationen. Wenn Sie Berechtigungsfehler innerhalb des
node_modules-Ordners eines lokalen Projekts sehen, hat das eine andere Ursache — meist eine Diskrepanz bei der Dateieigentümerschaft in Ihrem Projektverzeichnis.
npm Global Install-Berechtigungen beheben: Zwei sichere Ansätze
Option 1: Node.js mit einem Versionsmanager neu installieren (empfohlen)
npm empfiehlt offiziell die Verwendung eines Node-Versionsmanagers wie nvm, um EACCES-Fehler vollständig zu vermeiden. Wenn nvm Node installiert, legt es alles in Ihrem Home-Verzeichnis ab — einem Ort, der standardmäßig Ihrem Benutzer gehört. Kein Root-Zugriff erforderlich, niemals.
nvm installieren:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/HEAD/install.sh | bash
Dann Node installieren:
nvm install --lts
Danach funktioniert npm install -g ohne sudo oder Berechtigungsänderungen. Als Bonus ermöglicht nvm Ihnen den Wechsel zwischen Node-Versionen pro Projekt — etwas, das keine andere Lösung bietet.
Hinweis: Wenn Sie bereits ein benutzerdefiniertes npm-Präfix konfiguriert haben, verwaltet nvm sein eigenes Präfix intern. Kombinieren Sie nicht beide Ansätze in derselben Umgebung, da sie in Konflikt geraten können.
Option 2: Ein benutzereigenes globales npm-Verzeichnis konfigurieren
Wenn Sie nvm lieber nicht verwenden möchten, können Sie den globalen Installationsort von npm in ein Verzeichnis umleiten, das Ihrem Benutzer gehört. Dies ist die Alternative, die in der offiziellen npm-Dokumentation beschrieben wird.
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
Fügen Sie dann das bin-Verzeichnis zu Ihrem PATH hinzu. Für bash fügen Sie dies zu ~/.profile oder ~/.bashrc hinzu:
export PATH=~/.npm-global/bin:$PATH
Für zsh fügen Sie dieselbe Zeile zu ~/.zshrc hinzu und laden Sie sie dann neu:
source ~/.zshrc
Überprüfen Sie, ob es funktioniert, indem Sie ein Paket ohne sudo installieren:
npm install -g npm-check-updates
Discover how at OpenReplay.com.
Was ist mit sudo npm install -g?
Vermeiden Sie es. Die Verwendung von sudo mit npm installiert Dateien, die root gehören, was zu weiteren Berechtigungsproblemen führt und echte Sicherheitsrisiken mit sich bringt — ein bösartiges oder kompromittiertes Paket läuft mit erhöhten Rechten. Es ist eine kurzfristige Notlösung, die die Situation verschlimmert.
Eine schnelle Alternative: Verwenden Sie stattdessen npx
Wenn Sie ein CLI-Tool nur gelegentlich benötigen, ist eine globale Installation möglicherweise gar nicht erforderlich. npx führt Pakete aus, ohne sie global zu installieren, indem es ein lokales Paket verwendet oder eines temporär herunterlädt:
npm create vite@latest
Keine Berechtigungen erforderlich, kein globales Verzeichnis involviert.
Welche Lösung sollten Sie verwenden?
| Situation | Bester Ansatz |
|---|---|
| Entwickler, der mehrere Projekte verwaltet | nvm |
| Einzelner Rechner, kein Versionswechsel nötig | Benutzerdefiniertes npm-Präfix |
| Einmalige Nutzung eines CLI-Tools | npx |
Fazit
Die Ursache für npm install -g EACCES-Fehler ist fast immer dieselbe: npm versucht, in ein Root-eigenes Verzeichnis zu schreiben. Beheben Sie diese Diskrepanz an der Quelle — entweder mit nvm oder indem Sie npm auf ein Verzeichnis verweisen, das Ihnen gehört — und der Fehler verschwindet dauerhaft.
FAQs
Sie können es, aber Sie sollten es nicht. Die Verwendung von sudo installiert Pakete, die root gehören, was später zu weiteren Berechtigungsproblemen führt, wenn npm versucht, sie als Ihr normaler Benutzer zu aktualisieren oder zu entfernen. Außerdem setzt es Ihr System Sicherheitsrisiken aus, da jedes Installationsskript mit erhöhten Rechten ausgeführt wird. Verwenden Sie stattdessen nvm oder ein benutzerdefiniertes Präfix.
Globale Installationen schreiben in Systemverzeichnisse wie /usr/local/lib/node_modules, die auf den meisten Systemen root gehören. Lokale Installationen schreiben in einen node_modules-Ordner innerhalb Ihres Projektverzeichnisses, das Ihnen bereits gehört. Deshalb funktioniert npm install lokal einwandfrei, scheitert aber global ohne entsprechende Konfiguration.
Ja, Pakete, die zuvor unter dem alten Präfix installiert wurden, sind unter dem neuen nicht verfügbar. Sie müssen sie am neuen Ort neu installieren. Listen Sie Ihre alten globalen Pakete mit npm list -g --depth=0 auf, bevor Sie das Präfix ändern, und installieren Sie sie dann neu, sobald das neue Verzeichnis eingerichtet und Ihr PATH aktualisiert ist.
Im Allgemeinen nein. Windows verwendet ein anderes Berechtigungsmodell, und der Standard-Pfad für globale Installationen von npm unter Windows liegt bereits innerhalb des AppData-Ordners des Benutzers. EACCES-Fehler treten fast ausschließlich unter macOS und Linux auf, wo Unix-artige Dateieigentumsverhältnisse den Schreibzugriff auf Systemverzeichnisse wie /usr/local kontrollieren.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.