sudo: npm: polecenie nie znaleziono


201

Próbuję zaktualizować do najnowszej wersji węzła. Postępuję zgodnie z instrukcjami na stronie http://davidwalsh.name/upgrade-nodejs

Ale kiedy robię:

sudo npm install -g n

Dostaję błąd:

sudo: npm: command not found

npm działa bez sudo. Kiedy robię:

whereis node

Widzę:

node: /usr/bin/node /usr/lib/node /usr/bin/X11/node /usr/local/node

Bieganie:

which npm

Przedstawia:

/usr/local/node/bin/npm

Wypróbowałem rozwiązanie na https://stackoverflow.com/a/5062718/1246159

Ale wciąż pojawia się ten sam błąd. Zajrzałem również do pliku / etc / sudoers i odpowiedni wiersz to:

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Dla mnie to wygląda dobrze. Jak mogę uzyskać NPM do pracy z poleceniem sudo?


4
czy to działa? sudo /usr/bin/npm install -g n
robertklep

2
Czy możesz spróbować ponownie zainstalować węzeł? Wygląda na to, że usunąłeś npm.
Jeff Sloyer,

1
Być może dodałeś /usr/local/node/bindo swojego $PATH, ale npmpowinieneś go zainstalować /usr/local/bin. Nie ma pierwszego katalogu, w secure_pathktórym wyjaśniono, dlaczego sudonie można go znaleźć.
robertklep

1
Używając nvmtutaj Ubuntu - z komentarzem @robertklep próbowałem sudo /home/${user}/.nvm/version/node/${version}/bin/npm installi zadziałało.
Stav Pan Geffen

2
Rozwiązało to mój problem, instalując ponownie z następującego pakietu. nodejs.org/en/download
Marghoob Suleman

Odpowiedzi:


125

Plik npm powinien być w /usr/local/bin/npm. Jeśli go nie ma, zainstaluj ponownie plik node.js z pakietem na swojej stronie internetowej . To zadziałało w moim przypadku.


dzięki. Jeśli zainstalujesz węzeł na innych dyskach danych, na których nie jest zainstalowany system operacyjny, nie możesz znaleźć tej ścieżki.
Hardik Darji,

1
w przypadku Mac OS z Homebrew .. dwa kroki do zrobienia to (1), który węzeł (2), który npm, który powinien być zarówno w / usr / local / bin (gdzie Homebrew instaluje / węzeł dowiązań symbolicznych + npm) ... rozwiązać ... spróbuj (1) brew doctor (2) ponownie zainstalować brew, jeśli nadal powoduje problemy .. sprawdź swoją ścieżkę (echo $ PATH). musisz mieć wiele lokalizacji bin, które wskazują na różne instalacje węzłów. jeśli to jest przypadek ... oczyszczenie (jak zrobić to schludniej) twój ~ / .bashrc / ~ / .bash_profile, więc / usr / local / bin jest tam ładowane bez kolejnego wskazującego losową instalację węzła.
Jimmy MG Lim

3
To jest częściowe rozwiązanie. Problem występuje podczas ręcznej instalacji węzła. Musisz umieścić link do każdego zainstalowanego pliku binarnego w / usr / bin lub / usr / local / bin. Ustawienie ścieżki w bashrc roota nie będzie działać, ponieważ nie jest czytane podczas sudo, dlatego jest to jedyny sposób, chyba że zainstalujesz pakiet.
Shrimpwagon

jak powiedział @shrimpwagon, u dołu instrukcji podano link „sudo ln -s / usr / local / lib / nodejs / node- $ VERSION- $ DISTRO / bin / node / usr / bin / node sudo ln -s / usr / local / lib / nodejs / node- $ VERSION- $ DISTRO / bin / npm / usr / bin / npm sudo ln -s / usr / local / lib / nodejs / node- $ VERSION- $ DISTRO / bin / npx / usr / bin / npx "
James Nelson

169

musiałem zrobić

sudo apt-get install npm

to działało dla mnie.


6
Trudno zrozumieć, co chcesz wyrazić.
małe światło słoneczne

4
To jest przeterminowane. Dla mnie działały te polecenia, które znalazłem tutaj: github.com/nodesource/distribution#debinstall # Korzystanie z Ubuntu curl -sL deb.nodesource.com/setup_5.x | sudo -E bash - sudo apt-get install -y nodejs # Używanie Debiana jako root curl -sL deb.nodesource.com/setup_5.x | bash - apt-get install -y nodejs
Hamed

4
@tinysunlight Nie jestem pewien, co jest niejasne. Op mówi, że brakuje polecenia npm. To polecenie instaluje polecenie npm.
Velocibadgery

7
To nie jest poprawna odpowiedź na pytanie, ponieważ jest oczywiste z op, który npmjest już zainstalowany, ale nieosiągalny po wywołaniu przez sudo. Dzięki temu rozwiązaniu ponownie instalujesz npm, który już istnieje. To raczej walka z objawami niż znalezienie przyczyny. Rozumiem, że może to naprawić zepsute rzeczy dla niektórych ludzi, ale jest to mylące, tak stać.
Dominic

4
Kiedy zainstalowałem węzeł przy użyciu NVM na Ubuntu 18.10, sudo nie rozpoznaje npm jako polecenia. sudo apt-get install npmpracował dla mnie.
AlienKevin

91

W przypadku użytkowników MAC następujące kroki zadziałały dla mnie.

$ brew update
$ brew uninstall node
$ brew install node
$ brew postinstall 

5
brew uninstall nodeNie dla mnie, ale prowadzona z brew install nodea brew postinstalli problem został rozwiązany. Dzięki
Trevor,

2
Co brew postinstalldokładnie robi?
Oliver D

w wersji Homebrew 2.2.14 brew postinstalljest zbędny
Arslan Khan

63

Miałem ten sam problem; oto polecenia, aby to naprawić:

  • sudo ln -s /usr/local/bin/node /usr/bin/node
  • sudo ln -s /usr/local/lib/node /usr/lib/node
  • sudo ln -s /usr/local/bin/npm /usr/bin/npm
  • sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf

2
Pracowałem dla mnie nad CentOS 7
hirikarate

4
Pracowałem dla mnie Ubuntu 16.04.1 LTS. Używam NVM, więc pierwszą ścieżką było miejsce, w którym NVM zainstalował węzeł i npm (ścieżka zawiera wersję %HOME%/.nvm/versions/node/v7.4.0/bin/npm). Niestety, będę musiał odwoływać się do tej odpowiedzi przy każdej aktualizacji za pomocą NVM ze względu na zmianę wersji na ścieżce
kas

1
To rozwiązało również dla mnie! Pierwotnie opublikowane na Przepełnienie stosu: Na EC2: sudo nie znaleziono polecenia węzła, ale węzeł bez sudo jest w porządku
Dominic

2
@kas sudo ln -s $(whereis node) /usr/bin/node I tak dalej. w swoim profilu bash.
Aravind Voggu,

Pracowałem dla mnie w instancji AWS ec2.
Chirag Purohit

26

OSTRZEŻENIE (edycja)

Wykonanie a chmod 777jest dość radykalnym rozwiązaniem. Wypróbuj je najpierw, jeden po drugim, i przestań, gdy zadziała:

  • $ sudo chmod -R 777 /usr/local/lib/node_modules/npm
  • $ sudo chmod -R 777 /usr/local/lib/node_modules
  • $ sudo chmod g+w /usr/local/lib
  • $ sudo chmod g+rwx /usr/local/lib

$ brew postinstall node jest jedyną częścią instalacji, w której mógłbym dostać problem

Permission denied - /usr/local/lib/node_modules/npm/.github

Więc ja

// !! READ EDIT ABOVE BEFORE RUNNING THIS CODE !!
$ sudo chmod -R 777 /usr/local/lib
$ brew postinstall node

i viola, npm jest teraz połączone

$ npm -v
3.10.10

Dodatkowy

Jeśli używałeś-R 777 na lib, moim zaleceniem byłoby ustawienie domyślnie plików zagnieżdżonych i katalogów:

  • $ find /usr/local/lib -type f -print -exec chmod 644 {} \;
  • $ find /usr/local/lib -type d -print -exec chmod 755 {} \;
  • $ chmod /usr/local/lib 755

3
@Jacksonkr ..... czy właśnie poleciłeś chmcode 777 cały folder lokalny / lib?
sfratini

Jaki chmodpowinien być ten katalog?
tim_xyz

1
@tim_xyz drwxr-xr-xsą wartościami domyślnymi dla lib. To powiedziawszy, NIE używaj funkcji rekurencyjnej -Rpodczas przywracania folderu.
Jacksonkr,

Dzięki! sudo chmod -R 777 / usr / local / lib / node_modules pracował dla mnie
Hisagr


8

Dla użytkowników CentOS działa to dla mnie:

sudo yum install npm

1
problem z tym podejściem polega na tym, że na przykład w Fedorze jest bardzo przestarzały w repozytoriach dnf / yum
ACV

2
W CentOS 7 musisz najpierw włączyć repozytorium EPEL:yum install epel-release; yum install npm
hudolejev

8

Aby globalnie zainstalować pakiety npm z uprawnieniami sudo, /usr/bin/npmpowinny być dostępne. Jeśli npmistnieje w innym katalogu, utwórz miękkie łącze, takie jak:

sudo ln -s /usr/local/bin/npm /usr/bin/npm

Działa na Fedorze 25, węźle 8.0.0 i npm5.0.0


6

W systemie macOS zadziałało to dla mnie:

brew reinstall node

1
Przykro mi, ale zauważyłem, że pytanie jest oznaczone tagiem unix, ale może być nadal pomocne, ponieważ jest to najlepszy wynik wyszukiwania Google dla „nie znaleziono polecenia npm macos npm”
friederbluemle,

5

W przypadku debiana po zainstalowaniu węzła wprowadź

curl -k -O -L https://npmjs.org/install.sh    
ln -s /usr/bin/nodejs /usr/bin/node  
sh install.sh

5

Jeśli zainstalowałeś węzeł / npm za pomocą nvm, plik konfiguracyjny środowiska nvm musi zostać uruchomiony, zanim będziesz mógł użyć dowolnego z pakietów.

Zazwyczaj można to znaleźć w ~ / .nvm / nvm.sh.

Aby uruchomić to automatycznie, dołącz:

source ~/.nvm/nvm.sh

w pliku .bash_profile dla użytkownika

Jeśli następnie chcesz używać sudo z tym użytkownikiem, upewnij się, że dołączasz parametr -i, aby sudo ustawiało środowisko użytkownika. na przykład

sudo -iu jenkins npm install grunt-cli

4

po prostu zainstaluj ponownie.

Na RHEL, CentOS i Fedorze

sudo yum remove nodejs npm
sudo dnf remove nodejs npm   [On Fedora 22+ versions]

następnie

yum -y install nodejs npm
dnf -y install nodejs npm   [On Fedora 22+ versions]

easy! .. zarówno węzeł, jak i npm działają teraz jak urok!


3

Rozwiązałem ten problem przez

apt-get install npm2deb

1
jaka jest ta odpowiedź npm2deb to firma zewnętrzna
Beau Bouchard

1
nie jest w pełni „zaufany”, ponieważ w firmach zewnętrznych istnieje większe prawdopodobieństwo naruszenia bezpieczeństwa niż z npm bezpośrednio ze źródła. nie wiem nic o npm2deb, ale pomyśl o tym, jeśli chciałbyś go użyć w swojej firmie, prawdopodobnie byliby surowi w kwestii audytu
Kyle Calica-St

Jest to oczywiste dla wszystkich.
Игорь Демянюк

1

Miałem ten sam problem, ponieważ menedżer pakietów npm nie został zainstalowany podczas instalowania węzła. Przyczyną tego był następujący błąd: W procesie instalacji jest krok o nazwie „Instalacja niestandardowa”, tutaj możesz wybrać jedną z następujących opcji: 1) Środowisko uruchomieniowe Node.js (ta opcja jest domyślnie zaznaczona). 2) Menedżer pakietów npm 3) Skróty dokumentacji online. 4) Dodaj do ścieżki. Jeśli przejdziesz dalej, to np. Menedżer pakietów npm nie zostanie zainstalowany, a więc pojawi się błąd.

Rozwiązanie: Wybierz menedżera pakietów npm, gdy pojawi się te opcje. To zadziałało dla mnie.


1

Jeśli pobrałeś pakiet węzła i rozpakowałeś go gdzieś tak /opt, możesz po prostu utworzyć łącze symboliczne /usr/local/bin.

/usr/local/bin/npm -> /opt/node-v4.6.0-linux-x64/bin/npm
/usr/local/bin/node -> /opt/node-v4.6.0-linux-x64/bin/node

1

Też miałem ten sam problem w Homestead i próbowałem na wiele sposobów. Próbowałem z

sudo apt-get install nodejs

Otrzymuję następujący błąd:

The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
       Depends: node-abbrev (>= 1.0.4) but it is not going to be installed
       Depends: node-ansi (>= 0.3.0-2) but it is not going to be installed
       Depends: node-ansi-color-table but it is not going to be installed
       Depends: node-archy but it is not going to be installed
       Depends: node-block-stream but it is not going to be installed
       Depends: node-fstream (>= 0.1.22) but it is not going to be installed
       Depends: node-fstream-ignore but it is not going to be installed
       Depends: node-github-url-from-git but it is not going to be installed
       Depends: node-glob (>= 3.1.21) but it is not going to be installed
       Depends: node-graceful-fs (>= 2.0.0) but it is not going to be installed
       Depends: node-inherits but it is not going to be installed
       Depends: node-ini (>= 1.1.0) but it is not going to be installed
       Depends: node-lockfile but it is not going to be installed
       Depends: node-lru-cache (>= 2.3.0) but it is not going to be installed
       Depends: node-minimatch (>= 0.2.11) but it is not going to be installed
       Depends: node-mkdirp (>= 0.3.3) but it is not going to be installed
       Depends: node-gyp (>= 0.10.9) but it is not going to be installed
       Depends: node-nopt (>= 3.0.1) but it is not going to be installed
       Depends: node-npmlog but it is not going to be installed
       Depends: node-once but it is not going to be installed
       Depends: node-osenv but it is not going to be installed
       Depends: node-read but it is not going to be installed
       Depends: node-read-package-json (>= 1.1.0) but it is not going to be installed
       Depends: node-request (>= 2.25.0) but it is not going to be installed
       Depends: node-retry but it is not going to be installed
       Depends: node-rimraf (>= 2.2.2) but it is not going to be installed
       Depends: node-semver (>= 2.1.0) but it is not going to be installed
       Depends: node-sha but it is not going to be installed
       Depends: node-slide but it is not going to be installed
       Depends: node-tar (>= 0.1.18) but it is not going to be installed
       Depends: node-underscore but it is not going to be installed
       Depends: node-which but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

W końcu spróbowałem

sudo apt-get dist-upgrade

Działa dobrze.

root@homestead:/usr/local/bin# npm -v
3.10.10

root@homestead:/usr/local/bin# node -v
v6.13.0


0

Dołączona ścieżka binarna npm do ścieżki sudo przy użyciu visudo i edycji „secure_path”

Teraz działa „sudo npm”


0

Usuń całkowicie węzeł:

  brew uninstall --force node

Zainstaluj ponownie:

brew install node;
which node # => /usr/local/bin/node
export NODE_PATH='/usr/local/lib/node_modules'

0

W przypadku, gdy może być przydatne dla każdego, kto korzysta z rh-*pakietów, działało to dla mnie:

sudo ln -s /opt/rh/rh-nodejs8/root/usr/bin/npm /usr/local/bin/npm

0

Ponieważ zainstalowałem node.js przy użyciu pliku .tar dostępnego na node.js, musiałem umieścić lokalizację katalogu node:

~ / .bashrc

root, zmieniając z normalnego użytkownika na root za pomocą polecenia:

sudo -i

następnie musiałem dodać ścieżkę do węzła, w którym wyodrębniłem ją do pliku .bashrc, jak poniżej: wprowadź opis zdjęcia tutaj

następnie odświeżono plik .bashrc za pomocą

. ~ / .bashrc

odtąd

npm: command not found

odszedł


0

Pracuj dla mnie Rozwiązywanie błędów uprawnień EACCES podczas globalnej instalacji pakietów

Aby zminimalizować ryzyko błędów uprawnień, możesz skonfigurować npm do korzystania z innego katalogu. W tym przykładzie utworzysz i użyjesz ukrytego katalogu w swoim katalogu domowym.

Zrób kopię zapasową komputera. 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

Aby przetestować nową konfigurację, zainstaluj pakiet globalnie bez użycia sudo:

 npm install -g jshint

0

Dla mnie żadna z wyżej wymienionych metod przy użyciu Homebrew nie działała na macOS. Tak więc odinstalowałem węzeł za pomocą Homebrew i pobrałem pakiet węzła z https://nodejs.org/en/download/ i zainstalowałem go. Działa jak urok.


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.