Frage Npm wirft Fehler ohne Sudo


Ich habe gerade node und npm durch das Paket auf nodejs.org installiert und wenn ich versuche, etwas mit npm zu suchen oder zu installieren, löst es den folgenden Fehler aus, es sei denn, ich sudo den Befehl. Ich habe das Gefühl, dass dies ein Berechtigungsproblem ist? Ich bin schon der Administrator.

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0

1017
2018-04-22 15:35


Ursprung


Antworten:


Dies sieht wie ein Berechtigungsproblem in Ihrem Basisverzeichnis aus. Um das Eigentum an der .npm Verzeichnis ausführen:

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

1864
2018-04-22 16:11



Berechtigungen, die Sie bei der Installation von Node verwendet haben, werden benötigt, wenn Sie Dinge wie z Npm-Verzeichnis (npm link, npm install -g, etc.).

Wahrscheinlich haben Sie die Installation von Knoten mit root-Rechten durchgeführt, deshalb fordert Sie die globale Paketinstallation auf, root zu sein.


Lösung 1: NVM

Hack nicht mit Berechtigungen, installieren Sie Knoten auf die richtige Weise.

Auf einem Entwicklungscomputer sollten Sie Knoten mit root-Berechtigungen nicht installieren und ausführen, sonst Dinge wie npm link, npm install -g benötigt die gleichen Berechtigungen.

NVM (Node Version Manager) ermöglicht es Ihnen, Node ohne root-Berechtigungen zu installieren und erlaubt Ihnen auch, viele Versionen von Node zu installieren, um damit problemlos spielen zu können. Perfekt für die Entwicklung.

  1. Uninstall Node (root-Berechtigung wird wahrscheinlich benötigt). Dies könnte dir helfen.
  2. Dann installieren NVM folgende Anweisungen auf dieser Seite.
  3. Installieren Sie den Knoten über NVM: nvm install node

Jetzt npm link, npm install -g wird nicht länger erfordern, dass du root bist.

Bearbeiten: Siehe auch https://docs.npmjs.com/getting-started/fixing-npm-permissions


Lösung 2: Installieren Sie Pakete global für einen bestimmten Benutzer

Hacken Sie nicht mit Berechtigungen, installieren Sie NPM-Pakete global den richtigen Weg.

Wenn Sie auf OSX oder Linux sind, können Sie Erstellen Sie ein benutzerdefiniertes Verzeichnis für Ihr globales Paket und einrichten npm und node wissen, wie man global installierte Pakete findet.

Auschecken dieser tolle Artikel Schritt für Schritt Anleitung zur Installation von npm Modulen ohne Sudo.

Siehe auch: npm's Dokumentation auf Npm-Berechtigungen beheben.


482
2018-06-25 09:05



Außerdem benötigen Sie die Schreibberechtigung in node_modules Verzeichnis:

sudo chown -R $USER /usr/local/lib/node_modules

386
2017-08-24 03:23



Ich habe das bei der Installation von Recess (https://github.com/twitter/recess) um mein CSS für Bootstrap 3 zu kompilieren.

Beim Einbau der Aussparung:

-npm install recess -g
  1. Sie müssen die Berechtigungen in Ihrem Konto entsperren home Verzeichnis, wie Noah sagt:

    sudo chown -R `whoami` ~/.npm
    
  2. Sie benötigen auch Schreibrechte für die node_modules Verzeichnis, wie Xilo sagt, wenn es immer noch nicht funktioniert, versuchen Sie:

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. Wenn weiterhin Fehler auftreten, müssen Sie dies möglicherweise ebenfalls tun richtig /usr/local Berechtigungen:

    sudo chown -R `whoami` /usr/local
    

Bitte beachten Sie, dass wie angegeben in diesem Beitrag  /usr/local/ ist eigentlich kein Systemverzeichnis, wenn Sie auf einem Mac sind, also ist diese Antwort eigentlich perfekt "sicher" für Mac-Benutzer. Wenn Sie jedoch unter Linux sind, siehe Christopher Will's Antwort unten für eine Multi-User-freundliche, System-Dir sichere (aber komplexere) Lösung.


57
2017-10-03 23:16



Ändern des Besitzers in "System-Global" -Ordner ist ein Hack. Bei einer Neuinstallation würde ich NPM so konfigurieren, dass ein bereits beschreibbarer Speicherort für "Benutzer-globale" Programme verwendet wird:

npm config set prefix ~/npm

Stellen Sie dann sicher, dass Sie diesen Ordner zu Ihrem Pfad hinzufügen:

export PATH="$PATH:$HOME/npm/bin"

Sehen @ErikAndreas" Antworten zu NPM-Module werden nicht ohne Sudo installiert  und längere Schritt-für-Schritt-Anleitung durch @sindresorhus mit auch Sets $MANPATH.


49
2018-05-27 12:36



Andere Antworten schlagen vor, Besitzrechte oder Berechtigungen von Systemverzeichnissen für einen bestimmten Benutzer zu ändern. Ich scheue es sehr, dies zu tun, das kann sehr unangenehm werden und das ganze System durcheinander bringen!

Hier ist ein generischer und sicherer Ansatz, der auch Multi-User unterstützt.

Erstellen Sie eine neue Gruppe für Knotenbenutzer und fügen Sie dieser Gruppe die erforderlichen Benutzer hinzu. Legen Sie dann den Besitz von knotenabhängigen Dateien / Verzeichnissen dieser Gruppe fest.

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

Jetzt können Sie Ihre Module einfach als Benutzer installieren

npm install -g generator-angular

Einige Module (Grunt, Bower, yo etc.) müssen noch als root installiert werden. Dies liegt daran, dass sie in / user / bin / Symlinks erstellen.

Bearbeiten

3 Jahre später würde ich empfehlen zu verwenden Knoten Version Manager. Es spart Ihnen viel Zeit und Ärger.


35
2018-01-09 11:58



Das offizielle Dokumentation auf, wie man repariert npm install Berechtigungen mit einem EACCES Fehler liegt bei https://docs.npmjs.com/getting-started/fixing-npm-permissions.

Ich habe dieses Problem nach einer Neuinstallation von Knoten mit dem gefunden .pkg Installer unter OSX. Es gibt einige gute Antworten hier, aber ich habe noch keinen Link zu npmjs.com gesehen.

Option 1: Ändern Sie die Berechtigung in das Standardverzeichnis von npm

  1. Finde den Pfad zum npm-Verzeichnis:

    npm config get prefix
    

Für viele Systeme wird dies sein / usr / lokal.

WARNUNG: Wenn der angezeigte Pfad gerade ist / usr, wechseln zu Option 2.

  1. Ändern Sie den Besitzer der Verzeichnisse von npm in den Namen des aktuellen Benutzers (Ihr Benutzername!):

    sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
    

    Dies ändert die Berechtigungen der Unterordner, die von npm und einigen anderen Tools verwendet werden (lib / node_module, Behälter, und Aktie).

Option 2: Ändern Sie das Standardverzeichnis von npm in ein anderes Verzeichnis

Es gibt Zeiten, in denen Sie den Besitz des Standardverzeichnisses, das npm verwendet, nicht ändern möchten / usr), da dies zu Problemen führen kann, zB wenn Sie das System mit anderen Benutzern teilen.

Stattdessen können Sie npm so konfigurieren, dass ein anderes Verzeichnis verwendet wird. In unserem Fall ist dies ein verstecktes Verzeichnis in unserem Home-Ordner.

  1. Erstellen Sie ein Verzeichnis für globale Installationen:

    mkdir ~/.npm-global
    
  2. Konfigurieren Sie npm, um den neuen Verzeichnispfad zu verwenden:

    npm config set prefix '~/.npm-global'
    
  3. Öffne oder erstelle eine ~ / .profile Datei und füge folgende Zeile hinzu:

    export PATH=~/.npm-global/bin:$PATH
    
  4. In der Befehlszeile aktualisieren Sie Ihre Systemvariablen:

    source ~/.profile
    

11
2018-01-23 19:46