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
xruptronics
źródło
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
Saniya syed qureshi
źródło
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
Vishal Patel
źródło
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.

Siergiej
źródło
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.

xruptronics
źródło
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.

AJS
źródło
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.

Juanjo Salvador
źródło
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

ulittle
źródło
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
Raj Gohel
źródło
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.

Courtney Schwartz
źródło
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.

Manohar Reddy Poreddy
źródło
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.

Aniruddh Agarwal
źródło
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.

Renjith
źródło
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

Simon P
źródło
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

AyushKatiyar
źródło
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

J-Snor
źródło
0

Usuń folder dist i to rozwiązuje mój problem !!

Hekmat
źródło
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.

Atron Seige
źródło
0

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

sudo chown -R $USER:$GROUP /usr/local/lib/node_modules
didil
źródło
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.

MoKG
źródło
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.

Manasvini Ganesh
źródł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)

Muhammad Fazeel
źródło
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
Nisharg Shah
źródło
-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
Nitin Jha
źródło
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