Błąd „Brak takiego pliku lub katalogu” podczas używania npm

34

Zainstalowałem węzeł i npm, korzystając z instrukcji podanych tutaj

Udało mi się z powodzeniem użyć węzła. Jednak podczas próby zainstalowania modułu węzła „Formidable” pojawia się następujący błąd:

$npm install formidable
bash: /usr/local/bin/npm: /usr/local/bin/node: bad interpreter: No such file or directory

Kiedy robię a which npm, otrzymuję następujące dane wyjściowe:

$which npm
/usr/local/bin/npm

Nie mam pojęcia, co jest nie tak z npm tutaj - jakiś pomysł, jak to naprawić?

użytkownik109187
źródło
Witamy w Ask Ubuntu! Widzę, że zainstalowałeś Węzeł w /usr/local/bin/. Pakiety zastosowane w instrukcjach, które podłączyłeś, nie robią tego. Myślę, że zainstalowałeś także inny Węzeł ze źródła. Opowiedz całą historię.
gertvdijk
@gertvdijk Cóż, początkowo był zainstalowany węzeł 0.8.14. Chciałem zaktualizować to do wersji 0.8.18. Potem pobiegłem, $sudo apt-get remove --purge nodejs npmale to nie zadziałało. node --versionpo zainstalowaniu 0.8.18 nadal pokazywał 0.8.14. Tak więc which nodepostąpiłem zgodnie z postem, którego nie mogę teraz znaleźć - po prostu poinstruowałem, aby wykonać rm -r /usr/local/bin/...- w zasadzie niektóre pliki związane z węzłami w tym katalogu. Teraz po tym ponownie zainstalowałem węzeł i była to zaktualizowana wersja. Działa dobrze, ale npm nie.
user109187
Tak, dzieje się to podczas instalacji ze źródła. Będzie to mylić zarządzanie pakietami i tobą jako użytkownikiem. Instaluj oprogramowanie tylko jako pakiety, chyba że wiesz, co robisz. Aby poprawnie odinstalować, użyj instrukcji odinstalowania ze skryptami użytymi do zainstalowania tej wcześniejszej wersji. I edytuj swoje pytanie, aby uzyskać dodatkowe informacje. Widzisz, to jest strona pytań i odpowiedzi, a nie forum dyskusyjne. :)
gertvdijk
@gertvdijk Znalazłem post z instrukcją ręcznego usuwania plików - stackoverflow.com/a/5917184/1907800 . Ścieżka tutaj to / usr / bin / node
user109187

Odpowiedzi:

51

Biorąc pod uwagę @gertvdijk, odinstalowałem NPM za pomocą skryptu:

rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm*

(które można znaleźć tutaj )

Nawet po wykonaniu powyższego otrzymałem kolejny błąd:

$ npm install formidable  
bash: /usr/local/bin/npm: No such file or directory

Tak więc uruchomiłem hash -rterminal (zgodnie z instrukcjami pod NPM nie uruchomi się po aktualizacji ) i voila - zadziałało. NPM działa teraz!

użytkownik109187
źródło
1
jedyną użyteczną rzeczą było tutaj odkrycie hash, którego można po prostu użyć, aby wskazać inny węzeł / npm (a jeśli chcę pracować z więcej niż jedną wersją węzła?)
user309383
Piękny gość.
LM_Fielding 18.06.17
4
hash -r uratował mnie
diogo.abdalla
co hashrobi !?
Chanjung Kim
11

Ubuntu i niektóre dystrybucje Linuksa instalują interpreter węzła jako /usr/bin/nodejs, a nie /usr/local/bin/node.

Możesz rozwiązać ten problem, instalując nodejs-legacypakiet, który tworzy dowiązanie symboliczne od /usr/bin/nodejsdo /usr/bin/node.

Rozwiązanie:

sudo apt-get install nodejs-legacy

Odniesienia: pakiet nodejs-legacy

Pac
źródło
1
Wydaje się, nodejs-legacyże już nie istnieje.
Martín De la Fuente
2

Wygląda na to, że wcześniej zainstalowano inną wersję węzła ze źródła. Wskazuje na to /usr/local/binścieżka, w której wydaje się być teraz zainstalowany.

  1. Odinstaluj ten, który zainstalowałeś ze źródła. Zobacz instrukcje dostarczone ze źródłem, jak to zrobić. Nie ma jednego sposobu na odinstalowanie zainstalowanych skryptów oprogramowania, które nie działają z zarządzaniem pakietami systemu.
  2. Zainstaluj pakiety z są wymienione w instrukcjach, które łączysz w swoim pytaniu.
  3. Sprawdź, czy which npmteraz jest wyświetlana /usr/binjako ścieżka instalacji.

Ogólnie rzecz biorąc, nigdy nie powinieneś instalować pakietów ze źródła. A jeśli to zrobisz, pamiętaj o konsekwencjach, gdy przeskakujesz tutaj zarządzanie pakietami, a my się z tym pogubimy.

gertvdijk
źródło