Błąd: EACCES: odmowa pozwolenia


105

Biegnę npm zainstalować lodash ale wyrzuca błąd: EACCES: permission denied błąd. Wiem, że jest to problem z uprawnieniami, ale o ile wiem, uprawnienia sudo nie są wymagane do lokalnej instalacji modułu węzła. Jeśli uruchomię go z sudo, zostanie zainstalowany w folderze ~ / node_modules. drwxrwxr-x to uprawnienie do pliku istniejącego folderu. Nie wiem, co mogło pójść nie tak.

Poniżej znajduje się komunikat o błędzie.

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

jest właścicielem folderu node_modulesgłównego?
AJS,

Folder node_module nie jest jeszcze utworzony w folderze, w którym zamierzam zainstalować lodash.
xruptronics,

czy uruchomiłeś npm install w swoim katalogu / home / rupesh / lub w jakimś innym katalogu?
AJS,

ścieżka do folderu, w którym uruchamiam instalację npm to ~ / Desktop / es6
xruptronics

jakie są dane wyjściowe ls -l ~/Desktop | grep es6upewnij się, że jesteś właścicielem katalogu es6
AJS,

Odpowiedzi:


86

To polecenie rozwiązuje problem. U mnie zadziałało:

sudo npm install -g --unsafe-perm=true --allow-root

Dla każdego takiego jak ja, chociaż wydaje się, że to polecenie działało w momencie pisania, w przypadku Node v10.10.0otrzymałem następujący błąd: "npm ERR! Nie można zainstalować / var / www / project: Brak nazwy pakietu"
Wayne Smallman

1
Flagi --unsafe-perm = true --allow-root działały u nas przy użyciu węzła 10.15.0 do zainstalowania jako użytkownik root istniejącej aplikacji, w której node-sass nie zostałby zainstalowany. Dokładne polecenie, którego użyliśmy do zainstalowania node-sass w katalogu lokalnym folder node_modules to # npm install --save-dev --unsafe-perm = true --allow-root node-sass @ latest
Peter Edwards

Możesz użyć roota, aby rozwiązać problem (chociaż nie jest to zalecane).
Chris Marotta

Udało mi się go uruchomić, używając tych flag, więc tak naprawdę odpowiedź brzmi: sudo npm install -g --unsafe-perm = true --allow-root <nazwa-pakietu> @ <nazwa-wersji>
Frank Hu MSFT

46

Mam ten sam problem z instalacją serwera WebPack na całym świecie. Użyj kroków z tego adresu URL Rozwiązałem mój problem, moja praca dla Ciebie.

Kroki wymienione powyżej Tam: Utwórz kopię zapasową komputera przed rozpoczęciem.

Utwórz katalog dla instalacji globalnych:

1. mkdir ~/.npm-global

Skonfiguruj npm, aby używał nowej ścieżki katalogu:

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

Otwórz lub utwórz plik ~ / .profile i dodaj ten wiersz:

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

Wróć do wiersza poleceń, zaktualizuj zmienne systemowe:

4.source ~/.profile

Test: pobierz pakiet globalnie bez używania sudo.

npm install -g jshint

Zamiast kroków 2-4 możesz użyć odpowiedniej zmiennej ENV (np. Jeśli nie chcesz modyfikować ~ / .profile):

NPM_CONFIG_PREFIX=~/.npm-global

1
pracował na Mojave. Wielkie dzięki po 4-5 godzinach rozwiązywania problemów, to załatwiło sprawę!
Johnny

12

Miałem problem z Linuksem. napisałem

chown -R myUserName ./* 

w folderze mojego projektu.


7
Bardzo nie polecam. To dotyka wszystkich twoich katalogów i usuwa prawa roota w każdym z nich. Jeśli niektóre rzeczy muszą być ustawione jako root, niszczy to twoją obecną konfigurację.
Patrick Da Silva

11

Utworzenie package.json przy użyciu npm init rozwiązało mój problem.


Ale nie jestem pewien, dlaczego plik package.json jest wymagany podczas instalowania modułu węzła, ponieważ plik package.json nie jest aktualizowany ani używany w moim przypadku, ponieważ nie użyłem polecenia --save lub --save-dev ani podobnego.
xruptronics,

to jest dziwne. Myślę, że coś było pomieszane w twoim pliku konfiguracyjnym npm i zresetowanie go przez init, w każdym razie powinno to pozostać tajemnicą na zawsze, ponieważ nie mogłem znaleźć ani jednego odniesienia do podobnego problemu gdzie indziej.
AJS,

Miałem podobny problem z npm 6.9.0 i to też działało dla mnie.
Chris Marotta

8

Z tego, co widzę w opublikowanych przez Ciebie dziennikach:

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',

katalog /home/rupesh/node_modules/nie ma niezbędnych uprawnień do tworzenia katalogu, więc uruchomienie chown -r rupesh:rupesh /home/rupesh/node_modules/tego powinno rozwiązać problem.


Robiąc chown -R rupesh: rupesh / home / rupesh / node_modules / i uruchamiając npm install lodash ponownie zainstalowałem lodash w folderze ~ / node_module, ale tym razem nie wyświetla błędu, ale nie jest to miejsce, w którym zamierzam zainstalować.
xruptronics,

tak, wiem, że powinieneś utworzyć projekt w swoim katalogu domowym, a nie na pulpicie. npm z jakiegoś powodu instaluje twoje moduły /home/rupesh/node_modulesz jakiegoś powodu. Praca w twoim katalogu domowym i tak powinna być idealna
AJS,

Myślę, że ~ / Projects / es6 jest odpowiednikiem struktury ~ / Desktop / es6. Mam problem ze zrozumieniem, dlaczego node_modules nie jest tworzony w folderze es6 i dlaczego moduł lodash (lub cokolwiek) nie jest w nim zainstalowany. Nie miałem wcześniej do czynienia z tym problemem, ale co poszło nie tak dzisiaj, to jest to, co chcę dowiedzieć się.
xruptronics,

tak, przeczytałem dwa poprzednie komentarze i zdałem sobie sprawę z głupoty :), cóż, rozejrzałem się i nie mogłem znaleźć nikogo innego, kto miałby ten sam problem. Czy twój kod może znaleźć loadashmoduł?
AJS,

7

Nie ma uprawnień do zapisu dla others(rx). Spróbuj z

chmod a+w <folder>

i powtórz.


2
Nie chownma -ropcji, aby zapobiec konieczności używania go w każdym folderze w node_modules?
DrakaSAN

@Juanjo Salvador To nie zadziałało, generuje ten sam błąd.
xruptronics,

@DrakaSAN tak, chown ma opcję rekurencyjną.
Juanjo Salvador,

7

To od razu rozwiązało mój problem - mac Mojave 10.14.6 - PhpStorm.

Nieobsłużony błąd odrzucenia: EACCES: odmowa pozwolenia, mkdir '/Users/myname/.npm/_cacache/index-v5/fb/5a'

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

Oryginalny post: https://stackoverflow.com/a/50639828


5

Spróbuj nadać wszystkie uprawnienia do folderu swojego projektu za pomocą poniższego polecenia

sudo chmod -R 777 /yourProjectDirectoryName

Biegnij z

sudo npm install lodash

Jest to rozwiązanie
junior

Możesz nawet nie potrzebować 777. Dla mnie problem polegał na tym, że # były zbyt niskie. (775 naprawiło to.)
Andrew,

„Ustawienie uprawnień 777 do pliku lub katalogu oznacza, że ​​będzie on mógł być odczytywany, zapisywalny i wykonywalny przez wszystkich użytkowników i może stanowić ogromne zagrożenie bezpieczeństwa”. - linuxize.com/post/what-does-chmod-777-mean
MillerC

4

FWIW Miałem te same objawy, ale z innym opakowaniem. Tworzenie package.jsoni prowadzenie npm initzrobił NIE rozwiązać mój problem.

W tym systemie najwyraźniej tworzone były nowe foldery w tej lokalizacji z uprawnieniami roota. Podczasnpm install tworzone są nowe foldery. To spowodowało, że instalacja npm zakończyła się niepowodzeniem, nawet w przypadku sudo.

Rozwiązaniem było uruchomienie npm install appw innym miejscu bez umaski korzenia.


4

Powiązany problem:

Zmarnowane 3 godziny obejmujące kilka dni.

Na maszynie AWS EC2 działało poniżej:

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

Mam nadzieję, że to pomoże.


3

Rozwiązałem ten problem, zmieniając uprawnienia do mojego katalogu npm. Poszedłem do globalnego katalogu npm dla mnie był pod adresem

/home/<user-name>

Poszedłem do tego katalogu, wpisując to polecenie

cd /home/<user-name>

a następnie zmienił uprawnienia do folderu .npm, wprowadzając to polecenie.

sudo chmod -R 777 ".npm"

Dla mnie zadziałało jak urok. Ale jest w tym luka w zabezpieczeniach, tzn. Twój globalny katalog pakietów jest dostępny na wszystkich poziomach.


Dlaczego miałbyś pozwolić całemu światu na dostęp do tego konkretnego folderu?
egdavid

2

Najpierw zainstaluj bez -g (globalne) na root. Po próbie użycia -g (globalne) zadziałało dla mnie.


Pracował !! Na Macu przeniosłem mój folder z kodem do folderu głównego: HardDrive /, a „npm install” przebiegło bez zarzutu. Następnie przeniosłem folder z kodem z powrotem do miejsca, w którym chciałem, aby był w HardDrive / users / myUserName / Projects / code, ponownie uruchomiłem „npm install” i tym razem zadziałało.
Josh

2

LUBUNTU 19.10 / Ten sam problem działa: $ npm start

dump: Błąd: EACCES: odmowa pozwolenia, otwórz „/home/simon/xxx/pagebuilder/resources/scripts/registration/node_modules/.cache/@babel/register/.babel.7.4.0.development.json” w Object. fs.openSync (fs.js: 646: 18) w Object.fs.writeFileSync (fs.js: 1299: 33) w save (/ home / simon / xxx / pagebuilder / resources / scripts / registration / node_modules / @ babel / register / lib / cache.js: 52: 15) w _combinedTickCallback (internal / process / next_tick.js: 132: 7) w process._tickCallback (internal / process / next_tick.js: 181: 9) w Function.Module.runMain (module.js: 696: 11) w Object. (/home/simon/xxxx/pagebuilder/resources/scripts/registration/node_modules/@babel/node/lib/_babel-node.js:234:23) at Module._compile (module.js: 653: 30) at Object .Module._extensions..js (module.js: 664: 10) w Module.load (module.js: 566: 32)

Wygląda na to, że mój domyślny użytkownik (administrator) nie miał uprawnień do katalogów modułów węzłów.

To naprawiło to dla mnie!

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


2

Spróbuj tego: W wierszu poleceń, w swoim katalogu domowym, utwórz katalog dla instalacji globalnych:

mkdir ~/.npm-global

Skonfiguruj npm, aby używał nowej ścieżki katalogu:

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

W wybranym edytorze tekstu otwórz lub utwórz plik ~ / .profile i dodaj ten wiersz:

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

W wierszu poleceń zaktualizuj zmienne systemowe:

source ~/.profile

Przetestuj instalację pakietu na całym świecie bez używania sudo. Mam nadzieję, że to pomoże


1

Oto rozwiązanie dla GNU / Linux (Debian) użytkownicy (Wymień USERNAME z nazwą użytkownika ):

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



0

W systemie Windows okazało się, że port był już używany przez IIS.

Zatrzymanie usług IIS (kliknięcie prawym przyciskiem myszy, wyjście) rozwiązało problem.


0

Po prostu zmień właściciela node_moduleskatalogu globalnego na swojego użytkownika:

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

0

Wypróbowałem większość tych sugestii, ale żadna z nich nie zadziałała. Potem pobiegłem npm clean-installi to rozwiązało moje problemy.


0

node zaleca wykonanie następujących czynności:

 sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config

Jeśli wykonasz

npm config

Zobaczysz coś takiego

│                   npm update check failed                   │
│             Try running with sudo or get access             │
│            to the local update config store via             │
│ sudo chown -R $USER:$(id -gn $USER) /home/venkatesh/.config │

U mnie to zadziałało.


0

musimy nadać uprawnienia do zapisu w tym folderze za pomocą:

sudo chmod 777 path-to-directory

ścieżka-do-katalogu w tym projekcie to (/ home / ubuntu / blog / server)


0

Jeśli pojawi się błąd jak poniżej

Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/<PackageName>/vendor'

Sugeruję użycie poniższego polecenia, aby zainstalować pakiet globalny

sudo npm install -g <PackageName> --unsafe-perm=true --allow-root

-3

Wykonaj te polecenia, a problem zostanie rozwiązany!

sudo chmod -R 777 /usr/local/bin
sudo chmod -R 777 /usr/local/lib/node_modules

Dla /usr/locali wszystkich podkatalogów uprawnienia powinny należeć rwxr-xr-xdo użytkownika root. Użytkownicy systemu mogą czytać i wykonywać w ramach tej struktury katalogu, ale nie mogą edytować, tworzyć plików. Biorąc to pod uwagę, Twoja odpowiedź sugeruje udzielenie uprawnień wszystkim. I bez opisywania, w jaki sposób i na co to wpłynie, ani dlaczego problem zostanie rozwiązany.
Kuliraj
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.