Fehler: EACCES: Berechtigung verweigert

95

Ich führe npm install lodash aus, aber es wird ein Fehler ausgelöst: EACCES: Berechtigung verweigert Fehler. Ich weiß, dass es sich um ein Berechtigungsproblem handelt, aber meines Wissens ist für die lokale Installation des Knotenmoduls keine sudo-Berechtigung erforderlich. Wenn ich es mit sudo ausführe, wird es im Ordner ~ / node_modules installiert. drwxrwxr-x ist die Dateiberechtigung des vorhandenen Ordners. Ich kann nicht herausfinden, was schief gelaufen sein könnte.

Unten ist die Fehlermeldung.

npm ERR! tar.unpack untar error /home/rupesh/.npm/lodash/4.13.1/package.tgz
npm ERR! Linux 3.13.0-88-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "lodash"
npm ERR! node v4.3.1
npm ERR! npm  v2.14.12
npm ERR! path /home/rupesh/node_modules/lodash
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir

npm ERR! Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash'
npm ERR!     at Error (native)
npm ERR!  { [Error: EACCES: permission denied, mkdir '/home/rupesh/node_modules/lodash']
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',
npm ERR!   fstream_stack: 
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:35:25',
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:47:53',
npm ERR!      'FSReqWrap.oncomplete (fs.js:82:15)' ] }
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!     /home/rupesh/Desktop/es6/npm-debug.log
xruptronics
quelle
ist der Besitzer des Ordners node_modulesroot?
AJS
Der Ordner node_module wurde noch nicht in dem Ordner erstellt, in dem ich lodash installieren möchte.
Xruptronics
Haben Sie npm install in Ihrem Verzeichnis / home / rupesh / oder einem anderen Verzeichnis ausgeführt?
AJS
Pfad des Ordners, in dem ich npm install ausführe, ist ~ / Desktop / es6
xruptronics
Was ist die Ausgabe von Stellen ls -l ~/Desktop | grep es6Sie sicher, dass Sie der Eigentümer des es6-Verzeichnisses sind
AJS

Antworten:

74

Dieser Befehl behebt das Problem. Es hat bei mir funktioniert:

sudo npm install -g --unsafe-perm=true --allow-root
Saniya syed qureshi
quelle
Für jeden wie mich, obwohl dieser Befehl zum Zeitpunkt des Schreibens anscheinend funktioniert hat, wurde für Node v10.10.0die folgende Fehlermeldung angezeigt : "npm ERR! Kann / var / www / project nicht installieren: Fehlender Paketname"
Wayne Smallman
1
Die Flags --unsafe-perm = true --allow-root haben für uns unter Verwendung von Knoten 10.15.0 funktioniert, um als Benutzer root eine vorhandene Anwendung zu installieren, bei der Node-Sass nicht installiert werden würde. Der genaue Befehl, den wir verwendet haben, um node-sass im lokalen Verzeichnis node_modules zu installieren, war # npm install --save-dev --unsafe-perm = true --allow-root node-sass @ spätestens
Peter Edwards
Sie können root verwenden, um das Problem zu lösen (obwohl dies nicht empfohlen wird).
Chris Marotta
Ich konnte es mit diesen Flags zum Laufen bringen, also lautet die Antwort wirklich: sudo npm install -g --unsafe-perm = true --allow-root <Paketname> @ <Versionsname>
Frank Hu MSFT
45

Ich habe das gleiche Problem mit der Installation des Webpack-Servers auf globaler Ebene. Verwenden Sie die Schritte aus dieser URL. Mein Problem wurde behoben. Ich arbeite für Sie.

Die oben genannten Schritte Dort: Sichern Sie Ihren Computer, bevor Sie beginnen.

Erstellen Sie ein Verzeichnis für globale Installationen:

1. mkdir ~/.npm-global

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

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

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

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

Aktualisieren Sie in der Befehlszeile Ihre Systemvariablen:

4.source ~/.profile

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

npm install -g jshint

Anstelle der Schritte 2 bis 4 können Sie die entsprechende ENV-Variable verwenden (z. B. wenn Sie ~ / .profile nicht ändern möchten):

NPM_CONFIG_PREFIX=~/.npm-global
Vishal Patel
quelle
1
arbeitete an Mojave. Vielen Dank nach 4-5 Stunden Fehlerbehebung, dies hat den Trick getan!
Johnny
11

Das Erstellen von package.json mit npm init hat mein Problem behoben.

xruptronics
quelle
Ich bin mir jedoch nicht sicher, warum die Datei package.json während der Installation des Knotenmoduls erforderlich ist, da die Datei package.json in meinem Fall nicht aktualisiert oder verwendet wird, da ich den Befehl --save oder --save-dev oder einen ähnlichen Befehl nicht verwendet habe.
Xruptronics
das ist komisch. Ich denke, etwas wurde in Ihrem npm conf durcheinander gebracht und init hat es zurückgesetzt. Auf jeden Fall sollte es für immer ein Rätsel sein, da ich anderswo keinen einzigen Hinweis auf ein ähnliches Problem finden konnte.
AJS
Hatte ein ähnliches Problem mit npm 6.9.0 und das hat auch bei mir funktioniert.
Chris Marotta
11

Ich hatte ein Problem unter Linux. Ich hab geschrieben

chown -R myUserName ./* 

in meinem Projektordner.

Sergey
quelle
6
Sehr nicht zu empfehlen. Das berührt alle Ihre Verzeichnisse und entfernt Root-Rechte für eines von ihnen. Wenn einige Dinge als root festgelegt werden müssen, wird Ihre aktuelle Konfiguration zerstört.
Patrick Da Silva
7

Nach dem, was ich in Ihren Protokollen sehen kann, haben Sie Folgendes gepostet:

npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_type: 'Directory',
npm ERR!   fstream_path: '/home/rupesh/node_modules/lodash',
npm ERR!   fstream_class: 'DirWriter',

Das Verzeichnis /home/rupesh/node_modules/verfügt nicht über die erforderlichen Berechtigungen zum Erstellen eines Verzeichnisses. Führen Sie chown -r rupesh:rupesh /home/rupesh/node_modules/dies aus, um das Problem zu beheben.

AJS
quelle
Wenn Sie chown -R rupesh: rupesh / home / rupesh / node_modules / ausführen und npm install lodash erneut installieren, wird lodash im Ordner ~ / node_module installiert. Diesmal wird jedoch kein Fehler ausgegeben. Aber es ist nicht der Ort, an dem ich installieren möchte.
Xruptronics
Ja, ich weiß, Sie sollten das Projekt in Ihrem Home-Verzeichnis und nicht auf dem Desktop erstellen. Aus irgendeinem Grund installiert npm Ihre Module /home/rupesh/node_modulesaus irgendeinem Grund. Jede Art und Weise, wie Sie in Ihrem Home-Verzeichnis arbeiten, sollte sowieso ideal sein
AJS
Ich denke, ~ / Projects / es6 entspricht in Bezug auf die Struktur ~ / Desktop / es6. Ich habe Probleme herauszufinden, warum node_modules nicht im es6-Ordner erstellt wird und warum das lodash-Modul (oder was auch immer) nicht darin installiert ist. Ich hatte dieses Problem vorher nicht gesehen, aber was heute schief gelaufen ist, das möchte ich herausfinden.
Xruptronics
Ja, ich habe meine beiden vorherigen Kommentare gelesen und die Dummheit erkannt :) Nun, ich habe mich umgesehen und konnte niemanden finden, der das gleiche Problem hat. Kann Ihr Code das loadashModul finden ?
AJS
6

Es hat keine Schreibberechtigungen für others(rx). Versuche es mit

chmod a+w <folder>

und wiederholen.

Juanjo Salvador
quelle
2
Nicht chowneine -rOption zu verhindern, die sie verwenden , um auf jedem einzelnen Ordner in node_modules?
DrakaSAN
@ Juanjo Salvador Es hat nicht funktioniert. Es wirft den gleichen Fehler.
Xruptronics
@ DrakaSAN Ja, Chown haben eine rekursive Option.
Juanjo Salvador
6

Dies löste mein Problem sofort - mac Mojave 10.14.6 - PhpStorm.

Nicht behandelte Ablehnung Fehler: EACCES: Berechtigung verweigert, mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

sudo chown -R $USER:$GROUP ~/.npm
sudo chown -R $USER:$GROUP ~/.config

Ursprünglicher Beitrag: https://stackoverflow.com/a/50639828

ulittle
quelle
5

Versuchen Sie, Ihrem Projektordner mit dem folgenden Befehl alle Berechtigungen zu erteilen

sudo chmod -R 777 /yourProjectDirectoryName

laufen mit

sudo npm install lodash
Raj Gohel
quelle
Es ist eine jr-Lösung
Pablo Papalardo
Sie brauchen vielleicht nicht einmal 777. Für mich war das Problem nur, dass die # zu niedrig waren. (775 behoben.)
Andrew
4

FWIW Ich hatte die gleichen Symptome, aber mit einem anderen Paket. Das Erstellen package.jsonund Ausführen npm inithat mein Problem NICHT gelöst.

Auf diesem System wurden anscheinend neue Ordner an diesem Speicherort mit Root-Berechtigungen erstellt. Währenddessen npm installwerden neue Ordner erstellt. Dies führte dazu, dass die Installation von npm auch mit sudo teilweise fehlschlug.

Die Lösung bestand darin, npm install appan einem anderen Ort ohne Root-Umask zu laufen .

Courtney Schwartz
quelle
4

Ein verwandtes Problem:

Verschwendet 3 Stunden über mehrere Tage.

Auf einer AWS EC2-Maschine funktionierte Folgendes:

sudo chown -R $(whoami) /home/ubuntu/.cache
sudo chown -R $(whoami) /home/ubuntu/.config
sudo chown -R $(whoami) /home/ubuntu/.local
sudo chown -R $(whoami) /home/ubuntu/.npm
sudo chown -R $(whoami) /home/ubuntu/.pm2

Hoffentlich hilft das.

Manohar Reddy Poreddy
quelle
3

Ich habe dieses Problem gelöst, indem ich die Berechtigung meines npm-Verzeichnisses geändert habe. Ich ging in das globale Verzeichnis von npm, in dem es sich befand

/home/<user-name>

Ich ging in dieses Verzeichnis, indem ich diesen Befehl eingab

cd /home/<user-name>

und ändern Sie dann die Berechtigung des Ordners .npm, indem Sie diesen Befehl eingeben.

sudo chmod -R 777 ".npm"

Es hat für mich wie ein Zauber gewirkt. Es gibt jedoch eine Sicherheitslücke, dh Ihr globales Paketverzeichnis ist für alle Ebenen zugänglich.

Aniruddh Agarwal
quelle
Warum sollten Sie der ganzen Welt erlauben, auf diesen bestimmten Ordner zuzugreifen?
Egdavid
2

Zuerst ohne -g (global) auf root installieren. Nach dem Versuch, -g (global) zu verwenden, hat es bei mir funktioniert.

Renjith
quelle
Hat funktioniert!! Auf dem Mac wurde mein Codeordner in meinen Stammordner verschoben: HardDrive /, und "npm install" lief einwandfrei. Dann habe ich meinen Codeordner wieder an den gewünschten Ort in HardDrive / users / myUserName / Projects / code verschoben, "npm install" erneut ausgeführt und diesmal hat es funktioniert.
Josh
2

LUBUNTU 19.10 / Gleiches Problem läuft: $ npm start

dump: Fehler: EACCES: Berechtigung verweigert, öffnen Sie '/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json' unter Object. fs.openSync (fs.js: 646: 18) unter Object.fs.writeFileSync (fs.js: 1299: 33) unter save (/ home / simon / xxx / pagebuilder / resources / scripts / register / node_modules / @ babel / register / lib / cache.js: 52: 15) bei _combinedTickCallback (intern / process / next_tick.js: 132: 7) bei process._tickCallback (intern / process / next_tick.js: 181: 9) bei Function.Module.runMain (module.js: 696: 11) bei Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) unter Module._compile (module.js: 653: 30) unter Object .Module._extensions..js (module.js: 664: 10) bei Module.load (module.js: 566: 32)

Mein Standardbenutzer (Administrator) hatte anscheinend keine Rechte für Knotenmodulverzeichnisse.

Das hat es für mich behoben!

$ sudo chmod a+w node_modules -R ## from project root

Simon P.
quelle
2

Versuchen Sie Folgendes: Erstellen Sie in der Befehlszeile in Ihrem Ausgangsverzeichnis 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 in Ihrem bevorzugten Texteditor 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

Testen Sie die globale Installation des Pakets ohne Verwendung von sudo. Ich hoffe, es hilft

AyushKatiyar
quelle
1

Hier ist die Lösung für GNU / Linux (Debian) -Benutzer (Ersetzen Sie USERNAME durch Ihren Benutzernamen ):

sudo chown -R $USER:$(id -gn $USER) /home/USERNAME/.config
J-Schnarchen
quelle
0

Entfernen Sie dist Ordner und dies löst mein Problem!

Hekmat
quelle
0

Unter Windows stellte sich heraus, dass der Port bereits von IIS verwendet wurde.

Durch Beenden von IIS (Rechtsklick, Beenden) wurde das Problem behoben.

Atron Seige
quelle
0

Ändern Sie einfach den Eigentümer des globalen node_modulesVerzeichnisses in Ihren Benutzer:

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules
didil
quelle
-2

Führen Sie diese Befehle aus und das Problem wird behoben!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules
Nitin Jha
quelle
Für /usr/localund alle Unterverzeichnisse sollten die Berechtigungen rwxr-xr-xroot gehören und gehören. Benutzer des Systems können innerhalb dieser Verzeichnisstruktur lesen und ausführen, aber keine Dateien bearbeiten oder erstellen. Abgesehen davon schlägt Ihre Antwort vor, allen Berechtigungen zu erteilen. Und ohne zu beschreiben, wie und was davon betroffen sein wird oder warum das Problem gelöst wird.
Kuliraj