W przypadku instalacji npm: nieobsługiwane odrzucenie Błąd: EACCES: odmowa uprawnień


271

Udało mi się uszkodzić moją npminstalację i za każdym razem, gdy próbuję zainstalować pakiety przy użyciu npm install, otrzymuję komunikaty o błędach w następujący sposób:

Nieobsługiwane odrzucenie Błąd: EACCES: odmowa dostępu, otwórz „/Users/marknorgate/.npm/_cacache/tmp/a449402d”

Próbowałem ponownie zainstalować węzeł i npm, a także próbowałem przenieść pamięć podręczną npm gdzie indziej, korzystając z tych instrukcji, ale nic nie działa.

Jak mogę to uruchomić?

Odpowiedzi:


924

Przywróć własność folderów powiązanych z NPM bieżącego użytkownika, tak jak to:

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

10
To zadziałało dla mnie po wypróbowaniu 4-5 innych rzeczy, które nie działały: 1) --unsafe-perm, 2) uaktualnianie npm, 3) restartowanie, 4) uruchamianie sudo itp.
Alex York

2
To samo co @AlexYork dla mnie. Widziałem już mojego użytkownika i grupę jako właściciela tych dwóch, ale chyba podkatalog lub dwa miały różnych właścicieli. Dzięki!
Vedran

1
Ten pracował dla mnie :), wcześniej próbowałem to docs.npmjs.com/... . Nie mogę zrozumieć, czy to ten sam problem, czy inny.
nim118

1
Wygląda na to, że w pewnym momencie, gdy wymachiwałem węzłem, jeden z tych katalogów pamięci podręcznej został utworzony z rootwłasnością. To naprawiło wszystko. Dziękuję Ci!
Lonnon Foster

2
to zadziałało dla mnie, dziękuję! Próbowałem ponownie zainstalować npm za pomocą menedżera wersji węzła, który jest polecany przez npm, ale to nie działało!
Kubuś Phan


42

Dzieje się tak, jeśli po raz pierwszy uruchamiasz NPM z sudo, na przykład podczas próby instalacji npm -g.

Foldery pamięci podręcznej muszą być własnością bieżącego użytkownika, a nie root.

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

Daje to prawo własności do powyższych folderów, gdy działają z normalnymi uprawnieniami użytkownika (nie jak sudo).

Warto również zauważyć, że nie powinieneś instalować globalnych pakietów za pomocą SUDO. Jeśli napotkasz problemy z uprawnieniami, warto zmienić katalog globalny. Dokumenty zalecają:

mkdir ~/.npm-global

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

Następnie aktualizuj ŚCIEŻKĘ w dowolnym miejscu (~ / .profile itp.)

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

Następnie musisz się upewnić, że zmienna PATH env jest ustawiona (restart terminalu lub użycie polecenia source)

https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally


3
Głosuję na to, aby wyjaśnić, dlaczego :)
lnoogn

Tak. To rozwiązało problem, gdy powyższe „prawidłowe rozwiązanie” nie.
John Smith

Wszystkie te rzeczy powinny być wyodrębnione przez npm, ale zamiast tego musimy sobie z tym poradzić ręcznie. Można by pomyśleć, że naprawianie takich rzeczy będzie priorytetem dla opiekunów, ale co ja wiem. Dziękujemy za wyjaśnienie, dlaczego musimy wykonywać te polecenia!
YungGun


9

Powyższa odpowiedź nie działała dla mnie. Po prostu spróbuj uruchomić polecenie--unsafe-perm .

na przykład

npm install -g node@latest --unsafe-perm

To wydaje się rozwiązać problem.


@JenLim załatwiłeś to czy nie?
Junaid Farooq

Rozwiązałem problem, uruchamiając w terminalu: npm cache clear - force.
Aspyn Lim 16.04.19


2

wystarczy utworzyć foldery _cache/tmpw ramach .npmręcznie na miejscu /Users/marknorgate/.npm/_cacache/tmpi uruchomić polecenie z uprawnieniami administratora





1

zmienić własność

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

działał jak zainstalowałem pakiet przy użyciu sudo


1

Spróbuj użyć tego: W wierszu komend w katalogu domowym utwórz katalog dla instalacji globalnych:

mkdir ~/.npm-global

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

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

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

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

W wierszu polecenia zaktualizuj zmienne systemowe:

source ~/.profile

Teraz użyj npm install powinien działać.


0

możesz wypróbować następujące polecenie dla expo:

sudo chown -R $USER:$GROUP ~/.expo



-1

Ten działa dla mnie:

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

Nie korzystałem z, -gponieważ jestem jedynym użytkownikiem. Użyłem MacBooka Air.

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.