npm install -g less funktioniert nicht: EACCES: Berechtigung verweigert

202

Ich versuche, weniger auf phpstorm einzurichten, damit ich beim Speichern .less-Dateien zu .css kompilieren kann. Ich habe node.js installiert und im nächsten Schritt (gemäß diesem https://www.jetbrains.com/webstorm/help/transpiling-sass-less-and-scss-to-css.html ) wird dieser Befehl im ausgeführt Terminal

npm install -g less

Wenn ich dies jedoch tue, erhalte ich diese Fehler

  ~  npm install -g less
npm WARN install Couldn't install optional dependency: EACCES: permission denied, mkdir '/Users/brentscholl/.npm/mkdirp/0.5.1'
npm WARN install Couldn't install optional dependency: EACCES: permission denied, mkdir '/Users/brentscholl/.npm/graceful-fs/3.0.8'
npm WARN install Couldn't install optional dependency: EACCES: permission denied, mkdir '/Users/brentscholl/.npm/extend/3.0.0'
npm WARN install Couldn't install optional dependency: EACCES: permission denied, mkdir '/Users/brentscholl/.npm/readable-stream/2.0.4'
npm WARN install Couldn't install optional dependency: EACCES: permission denied, mkdir '/Users/brentscholl/.npm/chalk/1.1.1'
npm WARN install Couldn't install optional dependency: EACCES: permission denied, mkdir '/Users/brentscholl/.npm/xtend/4.0.1'
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
/usr/local/lib
└─┬ less@2.5.3
  ├─┬ errno@0.1.4
   └── prr@0.0.0
  ├── image-size@0.3.5
  ├── mime@1.3.4
  ├─┬ promise@6.1.0
   └── asap@1.0.0
  └─┬ source-map@0.4.4
    └── amdefine@1.0.0

npm ERR! Darwin 15.0.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "less"
npm ERR! node v5.0.0
npm ERR! npm  v3.3.6
npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access

npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, access '/usr/local/lib/node_modules']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/brentscholl/npm-debug.log

Ich bin hier ein absoluter Neuling und nicht sicher, was ich als nächstes tun soll. Jede Hilfe wäre sehr dankbar!

xslibx
quelle

Antworten:

353

Die Verwendung von sudo wird nicht empfohlen. Möglicherweise erhalten Sie später ein Berechtigungsproblem. Während das oben genannte funktioniert, bin ich kein Fan davon, Ordner von root so zu ändern, dass sie für Benutzer beschreibbar sind, obwohl dies möglicherweise nur bei mehreren Benutzern ein Problem darstellt. Um dies zu umgehen, können Sie eine Gruppe mit 'npm-Benutzern' verwenden, dies ist jedoch auch ein höherer Verwaltungsaufwand. Die Optionen für den Umgang mit Berechtigungen finden Sie hier in der Dokumentation: https://docs.npmjs.com/getting-started/fixing-npm-permissions

Ich würde mich für Option 2 entscheiden:

Um die Wahrscheinlichkeit von Berechtigungsfehlern zu minimieren, können Sie npm so konfigurieren, dass ein anderes Verzeichnis verwendet wird. In diesem Beispiel handelt es sich um ein verstecktes Verzeichnis in Ihrem Basisordner.

Erstellen Sie ein Verzeichnis für globale Installationen:

 mkdir ~/.npm-global

Konfigurieren Sie npm für die Verwendung des neuen Verzeichnispfads:

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

Öffnen oder erstellen Sie eine ~ / .profile-Datei und fügen Sie diese Zeile hinzu:

 export PATH=~/.npm-global/bin:$PATH

Aktualisieren Sie in der Befehlszeile Ihre Systemvariablen:

 source ~/.profile

Test: Laden Sie ein Paket global herunter, ohne sudo zu verwenden.

npm install -g jshint

Wenn immer noch Berechtigungsfehler angezeigt wird (Mac OS):

sudo chown -R $USER ~/.npm-global   

Dies funktioniert mit der Standard-Ubuntu-Installation von:

sudo apt-get install nodejs npm

Ich empfehle, nvmwenn Sie mehr Flexibilität bei der Verwaltung von Versionen wünschen: https://github.com/creationix/nvm

Unter MacOS sollte Brew funktionieren sudo, wenn Sie eine neuere npmVersion verwenden. Genießen :)

Vincent Gerris
quelle
Heads up-- Unter Ubuntu 18.04 musste ich mich abmelden und wieder anmelden, bevor die Änderung automatisch auch auf alle neuen Terminalfenster angewendet wurde.
Alexander Nied
Alexander, hast du sichergestellt, dass du den Quellbefehl verwendet hast? Das sollte dafür sorgen, dass die richtigen Umgebungsvariablen festgelegt werden. Das Abmelden sollte nicht erforderlich sein (funktioniert aber).
Vincent Gerris
das hat nicht funktioniert $ npm install -g jshint npm ERR! schreibe nach ende npm ERR! Ein vollständiges Protokoll dieses Laufs finden Sie in: npm ERR! /home/xx/.npm/_logs/2019-02-22T06_35_08_821Z-debug.log
Amjith
3
Vielen Dank
110

Führen Sie diese Befehle in einem Terminalfenster aus (Hinweis: Ersetzen Sie NICHT den $ USER-Teil ... das ist ein Linux-Befehl, um Ihren Benutzer zu erreichen!):

sudo chown -R $USER ~/.npm
sudo chown -R $USER /usr/lib/node_modules
sudo chown -R $USER /usr/local/lib/node_modules
Vagner Rodrigues
quelle
7
Ist es eine gute Idee, sich selbst zum Besitzer von Dingen zu machen /usr? Was ist, wenn jemand anderes Knotenmaterial installieren möchte?
Mark
6
Ich habe unter macOS High Sierra für mich gearbeitet und brauchte nur einen der drei Befehle : sudo chown -R $USER /usr/local/lib/node_modules. @Mark Das stimmt, aber es ist natürlich kein Problem, wenn Sie nur einen Benutzer haben.
Fabian von Ellerts
@FabianvonEllerts Nun, es ist immer noch einfacher, versehentlich Systemdateien zu löschen, da Sie kein sudo mehr benötigen ... Ich würde nur Best Practices befolgen, auch wenn Sie alleine sind, aber es liegt natürlich an Ihnen.
Mark
Ich bin bei Mark, es sei denn, Sie haben einen Benutzer (und selbst dann) möchten Sie nicht, dass die / usr-Unterverzeichnisse einem Benutzer gehören. In diesem Fall sollten Sie die Gruppe besser verwenden. Aber vielleicht sogar noch besser, verwenden Sie einfach Brew, wie ich in meiner Antwort erwähnt habe, es wird ohne Root-out of the Box funktionieren.
Vincent Gerris
11

Installieren Sie Node und npm mit Node Version Manager neu (wie in der npm-Dokumentation beschrieben) ), um Berechtigungsfehler zu vermeiden:

In OSX:

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

oder folgen Sie diesem Artikel:

http://dev.topheman.com/install-nvm-with-homebrew-to-use-multiple-versions-of-node-and-iojs-easily/

Windows-Benutzer sollten nvm-windows installieren . Weitere Hilfe zur Installation von nvm finden Sie in der nvm-Readme-Datei .

Dann wählen Sie zum Beispiel:

nvm install 8.0.0
nvm use 8.0

Jetzt können Sie es noch einmal versuchen:

npm install -g less
Gazdagergo
quelle
1
Ich habe dies verwendet, um Berechtigungsprobleme bei der Installation von Paketen auf CodeSandbox zu lösen.
Keith Taylor
11

Mac OS X Antwort

Sie haben keinen Schreibzugriff auf das Verzeichnis node_modules

npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules

Fügen Sie Ihren Benutzer dem Verzeichnis mit Schreibzugriff hinzu

  1. Öffnen Sie den Ordner mit den Knotenmodulen

    öffne / usr / local / lib /

  2. Führen Sie im Ordner node_modules ein cmd + I aus, um den Berechtigungsdialog zu öffnen
  3. Fügen Sie Ihren Benutzer hinzu, um Lese- und Schreibzugriff im Bereich Freigabe und Berechtigungen zu erhalten Geben Sie hier die Bildbeschreibung ein
Roderick Jonsson
quelle
Die einfachste und effizienteste Lösung für MacOS
itsazzad
8

Geben Sie hier die Bildbeschreibung einVerwenden Sie sudo -i, um zu $ ​​root zu wechseln, und führen Sie dann npm install -g xxxx aus

user3393929
quelle
7

Für meine Mac-Umgebung

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

Lösen Sie das Problem

Asadut Zaman
quelle
Ich glaube, dass dies bereits in der obigen Antwort von @ VagnerRodrigues behandelt wird.
Entpnerd
Ja, das habe ich gerade für die Mac-Umgebung erwähnt
Asadut Zaman
3

Klicken Sie einfach auf den folgenden Befehl:

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

Lassen Sie es uns zusammenfassen:

sudo

bedeutet, dass wir diesen Befehl als root ausführen, den System-Superuser. Dies liegt daran, dass wir keine Berechtigung zum Schreiben in diesen Ordner haben, aber root jede Berechtigung korrigieren kann. Dieser Befehl bedeutet auch, dass das System zur Bestätigung nach Ihrem Passwort fragt.

chown

ist der Befehl, mit dem wir den Eigentümer einer Datei oder eines Ordners ändern. Wir setzen die Option -R, um den Eigentümer rekursiv zu ändern, sodass wir auch Eigentümerzugriff auf alle bereits darin enthaltenen Dateien erhalten.

$ USER

ist eine Umgebungsvariable, die automatisch auf Ihren Benutzernamen festgelegt wird.

Und das letzte Stück ist der Ordnerpfad.

Wenn Sie diesen Pfad ausführen, wird der Ordner zu Ihrem Ordner, sodass Sie Ihre npm install -g-Befehle sicher ausführen können!

Akash Singh Sengar
quelle
0

Ich habe alle vorgeschlagenen Lösungen ausprobiert, aber nichts hat funktioniert.

Ich benutze macOS Catalina 10.15.3

Gehen Sie zu / usr / local /

Wählen Sie bin Ordner> Get Info

Fügen Sie Ihren Benutzer zu Freigabe und Berechtigungen hinzu. Lese- und Schreibberechtigungen. Geben Sie hier die Bildbeschreibung ein

Gehen Sie zum Terminal und führen Sie npm install -g @ ionic / cli aus

Es hat mir geholfen.

Gohar SUltan
quelle
-1

Stellen Sie unter Linux sicher, dass Sie alle Berechtigungen erhalten mit:

sudo su
kira
quelle
-2

Eine weitere Option ist das Herunterladen und Installieren einer neuen Version mithilfe eines Installationsprogramms.

https://nodejs.org/en/download/

Jim
quelle
-3

Hallo, ich benutze Ubuntu 18 und ich hatte auch diese Fehlermeldung bei der Installation von Prisma, dann füge ich einfach sudovorne hinzu

sudo npm i -g prisma
UA_
quelle