Właśnie zainstalowałem węzeł i npm poprzez pakiet na nodejs.org i ilekroć próbuję wyszukać lub zainstalować coś z npm, generuje następujący błąd, chyba że wykonam polecenie sudo. Mam wrażenie, że to problem z uprawnieniami? Jestem już administratorem.
npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR! errno: 3,
npm ERR! code: 'EACCES',
npm ERR! path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /Users/chietala/npm-debug.log
npm ERR! not ok code 0
sudo chown
: github.com/sindresorhus/guides/blob/master/…Odpowiedzi:
To wygląda na problem z uprawnieniami w twoim katalogu domowym. Aby odzyskać własność katalogu .npm, wykonaj:
źródło
whoami
to symbol zastępczy, ale działa dosłownie tak, jak jest, więc musi to być zmienna, której nie rozumiem.whoami
zapewniają, że zostanie on poprawnie wykonany, a następnie umieszczony w poleceniu chownsudo chown -R simpleascouldbe ~/.npm
Uprawnienia użyłeś podczas instalacji węzła będzie wymagany podczas robienia rzeczy jak pisanie w swoim katalogu npm (
npm link
,npm install -g
, itd.).Prawdopodobnie uruchomiłeś instalację węzła z uprawnieniami roota, dlatego globalna instalacja pakietu prosi cię o rootowanie.
Rozwiązanie 1: NVM
Na maszynie rozwoju, nie należy instalować i uruchamiać węzeł z uprawnieniami roota, inaczej rzeczy lubią
npm link
,npm install -g
będą musiały same uprawnienia.NVM (Node Version Manager) pozwala zainstalować Node bez uprawnień roota, a także pozwala zainstalować wiele wersji Node, aby łatwo z nimi grać. Idealny do programowania.
nvm install node
Teraz
npm link
,npm install -g
nie będzie już wymagać, aby być korzeń.Edycja: Zobacz także https://docs.npmjs.com/getting-started/fixing-npm-permissions
Rozwiązanie 2: Zainstaluj pakiety globalnie dla danego użytkownika
Jeśli korzystasz z systemu OSX lub Linux, możesz utworzyć dedykowany dla użytkownika katalog dla globalnego pakietu i konfiguracji
npm
oraznode
wiedzieć, jak znaleźć globalnie zainstalowane pakiety.W tym świetnym artykule znajdują się instrukcje krok po kroku dotyczące instalowania modułów npm globalnie bez sudo.
Zobacz także: dokumentacja npm na temat Naprawiania uprawnień npm .
źródło
npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm
- Musiałem ponownie zainstalować nodejs w powłoce root i odinstalować je, w przeciwnym razie nadal będziesz mieć dowiązania symboliczne do ciebie, chrząkać itp.sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g
stackoverflow.com/a/22290968/1449157, a następnie usunąłemnpm
i zainstalowałem przeznvm
Będziesz także potrzebować uprawnienia do zapisu w
node_modules
katalogu:źródło
~/tmp
katalog dla mnie.node_modules
w/usr/local/lib/
. wtf?Then I ran sudo chown -R $USER /* and everything was fine
- NIE - rujnujecie swoją maszynę.Zmiana właściciela folderów „system-global” to włamanie. Podczas nowej instalacji skonfigurowałbym NPM tak, aby używał już zapisywalnej lokalizacji dla programów „globalnych użytkowników”:
Następnie upewnij się, że dodajesz ten folder do swojej ścieżki:
Zobacz @ErikAndreas ' odpowiedź do modułów NPM nie zainstaluje globalnie bez sudo i dłuższy krok po kroku przez @sindresorhus z także zestawów
$MANPATH
.źródło
$HOME
wówczas zazwyczaj.profile
skrypt zajmie się$PATH
następnym razem, gdy go pozyskasz (np. Przy następnym logowaniu).$HOME
i może zakłócać inne (przyszłe?) Pliki / podfoldery NPM. Preferuj oddzielne pliki binarne z różnych menedżerów pakietów / języków / systemów kompilacji i jawnie ustawiane$PATH
(w skrypcie czasu logowania).~/lib/node_modules
wraz z powiązanym CLI, jeśli istnieją~/bin
. Dla wielu użytkowników, zwłaszcza jeśli nie mają root, oba istnieją~/bin
i~/lib
już istnieją.~/bin
a następnie wykonaj to samo dla jednego lub dwóch dodatkowych menedżerów pakietów. Może się to nie zdarzyć dzisiaj lub jutro, ale istnieje wyraźne ryzyko, że dwa pakiety od różnych menedżerów zderzą się z nazwami i zastąpią pliki innych użytkowników. To wystarczająco dobry przypadek, aby mieć osobne prefiksy. (Konkretne przykłady byłyby mile widziane.)Napotkałem to podczas instalowania Recess ( https://github.com/twitter/recess ) w celu skompilowania mojego CSS dla Bootstrap 3.
Podczas instalowania wnęki:
Musisz odblokować uprawnienia w swoim
home
katalogu, jak mówi Noe :Potrzebujesz także uprawnień do zapisu do
node_modules
katalogu, jak mówi Xilo , więc jeśli nadal nie działa, spróbuj:Jeśli nadal widzisz błędy, może być konieczne poprawienie
/usr/local
uprawnień :Należy pamiętać, że jak wskazano w tym poście, w
/usr/local/
rzeczywistości nie jest to systemowy katalog, jeśli jesteś na komputerze Mac, więc ta odpowiedź jest w rzeczywistości całkowicie „bezpieczna” dla użytkowników komputerów Mac. Jeśli jednak korzystasz z Linuksa, zapoznaj się z odpowiedzią Christophera Will'a , aby znaleźć przyjazne dla systemu, bezpieczne dla systemu (ale bardziej złożone) rozwiązanie.źródło
Uważaj!!! Uważaj!!! Uważaj!!!
chown lub chmod NIE jest rozwiązaniem ze względu na zagrożenie bezpieczeństwa.
Zamiast tego zrób to:
Najpierw sprawdź, gdzie npm wskazują, jeśli zadzwonisz:
Jeśli zwracany jest parametr / usr, możesz wykonać następujące czynności:
Spowoduje to utworzenie katalogu npm w twoim katalogu domowym i wskazanie
npm
go.Aby wprowadzić te zmiany na stałe, musisz dodać polecenie export do pliku .bashrc:
źródło
$PATH
, a nie sam łańcuch. Powinieneś to zmienić.Inne odpowiedzi sugerują zmianę własności lub uprawnień do katalogów systemowych dla konkretnego użytkownika. Odradzam to, ponieważ może to być bardzo niezręczne i może popsuć cały system!
Oto bardziej ogólne i bezpieczniejsze podejście, które obsługuje również wielu użytkowników.
Utwórz nową grupę dla użytkowników węzłów i dodaj wymaganych użytkowników do tej grupy. Następnie ustaw własność zależnych od węzłów plików / katalogów do tej grupy.
Teraz możesz łatwo zainstalować moduły jako użytkownik
Niektóre moduły (chrząknięcie, altana, jo itp.) Nadal będą wymagały instalacji jako root. Wynika to z faktu, że tworzą one dowiązania symboliczne w / user / bin /.
Edytować
3 lata później polecam użyć Node Version Managera . Oszczędza ci to dużo czasu i kłopotów.
źródło
staff
grupy, aby udzielić uprawnień moim folderom programistycznym. Warto także uruchomić,chmod g+ws node_modules
aby upewnić się, że Twoja grupa ma uprawnienia do odczytu / zapisu./usr/lib
jest pod kontrolą menedżera pakietów systemowych i nie powinieneś wprowadzać tam żadnych zmian.Oficjalna dokumentacja , w jaki sposób naprawić
npm install
uprawnienia zEACCES
błędu znajduje się w https://docs.npmjs.com/getting-started/fixing-npm-permissions .Ten problem napotkałem po nowej instalacji węzła przy użyciu
.pkg
instalatora w systemie OSX. Jest tu kilka świetnych odpowiedzi, ale nie widziałem jeszcze linku do npmjs.com.Opcja 1: Zmień uprawnienia do domyślnego katalogu npm
Znajdź ścieżkę do katalogu npm:
W przypadku wielu systemów będzie to / usr / local .
OSTRZEŻENIE : Jeśli wyświetlana ścieżka to po prostu / usr , przejdź do opcji 2 .
Zmień właściciela katalogów npm na nazwę bieżącego użytkownika (twoja nazwa użytkownika!):
Zmienia to uprawnienia do podfolderów używanych przez npm i niektóre inne narzędzia ( moduły lib / node , bin i share ).
Opcja 2: Zmień domyślny katalog npm na inny katalog
Są chwile, kiedy nie chcesz zmieniać prawa własności do domyślnego katalogu, którego używa npm (tj. / Usr ), ponieważ może to powodować pewne problemy, na przykład, jeśli udostępniasz system innym użytkownikom.
Zamiast tego możesz skonfigurować npm, aby używał zupełnie innego katalogu. W naszym przypadku będzie to ukryty katalog w naszym katalogu domowym.
Utwórz katalog dla instalacji globalnych:
Skonfiguruj npm, aby używał nowej ścieżki do katalogu:
Otwórz lub utwórz plik ~ / .profile i dodaj ten wiersz:
Wróć do wiersza poleceń i zaktualizuj zmienne systemowe:
źródło
/usr/bin/
? Teraz tylko twój użytkownik może uzyskać do niego dostęp. Logujesz się jako ktoś inny, nadal nie ma dostępu, ponieważ pliki znajdują się w katalogu domowym innego użytkownika!Jakby potrzebowaliśmy tutaj więcej odpowiedzi, ale w każdym razie ...
Sindre Sorus ma przewodnik Instaluj pakiety npm globalnie bez sudo na OS X i Linux, opisując, jak bezproblemowo zainstalować bez bałaganu z uprawnieniami:
Zapoznaj się ze źródłem tego przewodnika, aby uzyskać najnowsze aktualizacje.
źródło
TL; DR
-
Podczas korzystania
npm
pobiera pakiety do katalogu domowego użytkownika. Po uruchomieniu jako sudonpm
instaluje pliki w tym samym katalogu, ale teraz są własnością root.Tak właśnie dzieje się absolutnie z każdą osobą, która kiedykolwiek korzystała
npm
:npm install foo
sudo install -g foo-cli
bez problemunpm install bar
npm
projektantami,chmod
gdy znów musisz przejść do kataloguGdy użyjesz opcji
-i
lub-H
z sudo, katalog domowy będzieroot
katalogiem domowym. Wszelkie globalne instalacje będą buforować pakiety do/root/.npm
zamiastroot
używanych plików w/home/me/.npm
.Po prostu zawsze używaj
sudo -i
lubsudo -H
podczas uruchamiania,npm install
aby zainstalować pakiety globalne, anpm
problemy z uprawnieniami znikną.Na dobre.
http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html
- qv zaakceptowana odpowiedź na naprawienie już przejebane
npm
.źródło
Miałem podobny problem w modułach NPM nie można zainstalować globalnie bez sudo , problem polegał na tym, że kiedy zainstalowałem węzeł, zrobiłem to z sudo przez chris / lea ppa repo .
Moim rozwiązaniem było odinstalowanie węzła, a następnie zainstalowanie go w ten sposób:
Pobierz najnowsze stabilne źródła węzłów ze strony nodejs.org #in my case node-v0.10.20.tar.gz
PD: Jeśli nie chcesz zmieniać właściciela folderu / usr / local, możesz go zainstalować gdzieś, co już posiadasz. Problemem tego podejścia jest to, że będziesz musiał powiązać folder instalacyjny z wierszem poleceń bash, abyśmy mogli później użyć polecenia node
Przy każdym z tych podejść będziesz mógł wykonać następujące czynności bez korzystania z sudo
źródło
sudo chown $USER /use/local
przed budowaniem. Na razie wygląda dobrze, czas spróbować zbudować atom! Dzięki!Po uruchomieniu npm install -g gdzieś, może pojawić się błąd EACCES z prośbą o ponowne uruchomienie polecenia jako root / Administrator. To kwestia uprawnień.
Jest to łatwe do naprawienia , należy otworzyć twój terminal (Aplikacje> Narzędzia> Terminal)
** Zdecydowanie odradzam korzystanie z zarządzania pakietami w sudo (sudo npm -g zainstaluj coś), ponieważ możesz później uzyskać pewne problemy **
Odniesienie: http://foohack.com/2010/08/intro-to-npm/
źródło
sudo chown -R `whoami` ~/.npm
,sudo chown -R `whoami` /usr/local/lib
iDla komputerów Mac (na podstawie odpowiedzi Christophera Willa)
Mac OS X 10.9.4
Preferencje systemowe> Użytkownicy i grupy> (odblokuj)> naciśnij +:
Nowe konto>
Nazwa konta „Grupa” : nodegrp
Po utworzeniu grupy zaznacz użytkownika, który ma zostać włączony do tej grupy
źródło
sudo
lub zmienić własność grupy folderów, aby mogła być modyfikowana przez zwykłego użytkownika? Jeśli zwykły użytkownik nie powinien wykonywać żadnych działań na tym folderze, to oczywiście nie powinien zmieniać własności grupy do tego folderu.-H
flagą. W szczególnościsudo -H npm install -g <pkg>
. Zapewnia to prawidłowe określenie uprawnień do folderów systemowych i użytkowników. To, czego nie chcesz robić, to używaćsudo npm install -g
, ponieważ instaluje pliki należące do katalogu głównego do katalogu użytkownika. Byłoby wspaniale, gdyby npm były wystarczająco inteligentne, aby zrobić to we właściwy sposób, ale tak nie jest, więc musisz użyć-H
flagi sudo, aby poprawnie zainstalować globalnie.W moim przypadku dzieje się tak z powodu zgody ~ / tmp.
I jest OK!
źródło
Dla mnie wykonaj tylko
nie działa Potem też wykonuję
I wszystko działa dobrze!
źródło
/usr/lib
są plikami systemowymi i nie powinny być własnością twojego osobistego konta użytkownika.PROBLEM : Ty (użytkownik) nie masz odpowiedniego zestawu uprawnień do katalogu.
Natychmiastowym wyjściem jest uruchomienie instalacji npm przy użyciu sudo, ale może to dać ten sam błąd lub nieprawidłową instalację.
ORAZ zmiana własności katalogu nie jest dobrą opcją, tymczasową łatką.
Rozwiązanie / Sugestia : Zmień domyślny katalog npm (z oficjalnych dokumentów )
Utwórz kopię zapasową komputera przed przejściem do przodu.
(opcjonalnie) W przypadku błędnej instalacji najpierw ją odinstaluj:
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'
Otwórz lub utwórz plik
~/.profile
lub~/.bash_profile
i dodaj ten wiersz:export PATH=~/.npm-global/bin:$PATH
Wróć do wiersza poleceń, zaktualizuj zmienne systemowe lub ponownie uruchom terminal:
source ~/.profile
(opcjonalnie) Test: Pobierz pakiet globalnie bez użycia sudo.
npm install -g jshint
źródło
W przypadku, gdy
sudo chown -R $(whoami) ~/.npm
nie działało to dla Ciebie lub potrzebujesz nieterminowego rozwiązania do komend.Problem polega na tym, że Twoje konto użytkownika nie ma uprawnień do zapisu w folderze node_modules, więc możesz wykonać następujące czynności
Otwórz wyszukiwarkę i naciśnij
cmd
+shift
+,g
aby otworzyć przejdź do folderu z adresem URLWpisz następującą ścieżkę
/usr/local/lib/node_modules
i naciśnij klawisz GoKliknij
node_modules
folder prawym przyciskiem myszy i wybierzGet Info
Przewiń w dół do
sharing & permissions
sekcjiOdblokuj, aby móc wprowadzać zmiany.
Naciśnij
+
i dodaj swoje konto użytkownikaUpewnij się, że wybierasz
Read & Write
z listy rozwijanej w uprawnieniuTeraz powinieneś być w stanie zainstalować pakiety bez,
sudo
a problemy z pozwoleniami powinny zostać rozwiązaneźródło
Problem: Nie masz uprawnień do zapisu w katalogach używanych przez npm do przechowywania globalnych pakietów i poleceń.
Rozwiązanie: Zezwól na uprawnienia dla npm.
Otwórz terminal:
Wpisz to polecenie:
To rozwiązanie pozwala TYLKO na posiadanie potrzebnych katalogów, dzięki czemu inne katalogi są ładne i bezpieczne.
źródło
npm config get prefix
zwraca coś w folderze domowym, to rozwiązanie naprawi uprawnienia, ale nie rozwiąże problemu leżącego u podstaw instalacji globalnych pakietów w bezpieczny sposób dla współdzielonego środowiska.Kolejna świetna poprawka do prawidłowego skonfigurowania NPM, uruchom następujące polecenia:
źródło
możesz spróbować, działa na Ubuntu i Mac
źródło
Wydaje mi się, że najlepszą opcją jest ta sugerowana w dokumentacji npm , która polega na pierwszym sprawdzeniu, gdzie globalne moduły węzłów są domyślnie instalowane przez uruchomienie
npm config get prefix
. Jeśli tak, jak ja w Trusty,/usr
możesz chcieć zmienić go na folder, który możesz bezpiecznie posiadać, nie psując rzeczy tak jak ja.Aby to zrobić, wybierz lub utwórz nowy folder w systemie. Możesz chcieć mieć to w swoim katalogu domowym lub, podobnie jak ja,
/usr/local
dla zachowania spójności, ponieważ jestem także użytkownikiem komputera Mac (wolę nie patrzeć w różne miejsca w zależności od komputera, przed którym się znajduję). Innym dobrym powodem do tego jest fakt, że/usr/local
folder jest już prawdopodobnie w twojej ŚCIEŻCE (chyba że lubisz się bawić z ŚCIEŻKĄ), ale są szanse, że twój nowo utworzony folder nie jest i trzeba go dodać do ŚCIEŻ SIĘ w swoim pliku .bash-profile lub .bashrc .Krótko mówiąc, zmieniłem domyślną lokalizację globalnych modułów
npm config set prefix '/usr/local'
, utworzyłem folder/usr/local/lib/node_modules
(będzie używany przez npm) i zmieniłem uprawnienia do folderów używanych przez npm za pomocą polecenia:Teraz możesz bezpiecznie zainstalować globalnie dowolny moduł. Mam nadzieję że to pomoże!
źródło
W ten sposób rozwiązałem problem w systemie Windows 8.1:
źródło
Najlepszym rozwiązaniem byłoby to, które zapewnia dokumentacja npm.
W przypadku Ubuntu sugerowanym rozwiązaniem jest Opcja # 2
Krótkie kroki:
Utwórz katalog dla instalacji globalnych:
mkdir ~/.npm-global
Skonfiguruj npm, aby używał nowej ścieżki do katalogu: może pomóc ci sprawdzić, czy prefiks został zaktualizowany, czy nie. Wynik byłby <Twój katalog domowy> /. Npm-global
npm config set prefix '~/.npm-global'
npm config get prefix
Otwórz lub utwórz plik ~ / .profile i dodaj ten wiersz:
export PATH=~/.npm-global/bin:$PATH
Wróć do wiersza poleceń i zaktualizuj zmienne systemowe:
source ~/.profile
Zamiast kroków 2-4 możesz także użyć odpowiedniej zmiennej ENV (np. Jeśli nie chcesz modyfikować ~ / .profile):
NPM_CONFIG_PREFIX=~/.npm-global
W przypadku komputerów Mac sugerowane rozwiązanie to opcja nr 3
W systemie Mac OS można całkowicie uniknąć tego problemu, używając menedżera pakietów Homebrew
brew install node
źródło
Rozwiązuję go, zmieniając właściciela z roota na moją nazwę użytkownika
sudo chown -R me:me /home/me/.config/configstore/
zmień mnie swoją nazwą użytkownika i grupą.
źródło
Lubię używać grup ubuntu, aby to osiągnąć, zamiast zmieniać właściciela. To dość proste.
Najpierw zainstaluj nodejs i npm za pomocą apt-get
sudo apt-get update && sudo apt-get install nodejs npm
Dowiedz się, kto jest zalogowany, tj. Nazwa użytkownika, uruchom następującą komendę, aby zobaczyć ją w terminalu
whoami
Możesz zobaczyć listę grup, które zostały ci przypisane za pomocą bardzo prostej komendy, zwykle pierwszą grupą jest sama nazwa użytkownika
groups
Uruchom następujące, aby umożliwić dostęp zalogowanemu użytkownikowi
sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local
Zaktualizuj npm i nodejs
npm install -g npm
Masz wszystko, użytkownik może uruchamiać polecenia npm bez sudo
Możesz również skorzystać z tego linku https://askubuntu.com/a/1115373/687804
źródło
W systemie Mac OS X podczas instalacji za pomocą Homebrew's
brew install npm
ścieżka instalacji obejmuje/usr/local/share/npm/
zarówno podfoldery, jakbin/
ilib/node_modules/
podfoldery.Uruchomienie tego polecenia, aby zmienić właściciela na aktualnie zalogowanego użytkownika, powinno to wszystko naprawić i umożliwić instalację globalnych pakietów NPM bez
sudo
.osx homebrew
źródło
npm config
zamiast.Właściwie miałem ten sam problem. Uruchomiłem Ubuntu. Mój problem powstaje, ponieważ straciłem swój klucz publiczny Ubuntu. Nawet aktualizacja mojego systemu nie miała miejsca. Dał błąd GPG. W takim przypadku możesz odzyskać klucz, używając tego polecenia:
Po tym npm działa dobrze!
źródło
John Papa wskazuje na historię i uzasadnienie tego problemu i daje solidną poprawkę :
Kroki Johna Papy to:
Mam nadzieję, że to pomaga ciekawskim!
źródło
To rozwiązanie wykorzystałem i pracowałem. Próbowałem wykorzystać
whoami
nigdy nie działało.sudo chown -R $USER /usr/local/lib/node_modules
następnie
sudo chown -R $USER /usr/local/bin/npm
następnie
sudo chown -R $USER /usr/local/bin/node
źródło
Odpowiedź @Yves M. była bardzo podobna do mojego rozwiązania. Oto polecenia, których użyłem, które nieco różniły się od jego.
Następnie zapytaj o najnowszą wersję:
Następnie zainstaluj najnowszą wersję:
przykład
źródło