Nie można zainstalować NodeJs: / usr / bin / env: node: Brak takiego pliku lub katalogu

302

Próbuję zainstalować nodeJs w moim Ubuntu 14.04, aby móc korzystać z GruntJs.

Czytałem o Ubuntu innym sposobie zrobienia tego ( problemy? ), Więc zrobiłem to, aby go zainstalować:

sudo apt-get install npm

sudo npm install -g grunt-cli

Pisanie chrząknięcie po tym mam błąd:

/usr/bin/env: node: No such file or directory

Próbowałem więc:

curl -sL https://deb.nodesource.com/setup | sudo bash -

sudo apt-get install -y nodejs

sudo apt-get update

Próbuję ponownie i nadal pojawia się błąd, próbowałem:

sudo add-apt-repository https://launchpad.net/~chris-lea/+archive/node.js/

sudo apt-get install -y nodejs

Mam tę wiadomość:

nodejs is already the newest version.
0 to upgrade, 0 to newly install, 0 to remove and 3 not to upgrade.

Próbowałem oczyścić na wszelki wypadek:

sudo apt-get autoremove

Ale nie, błąd nadal występuje: kiedy wpisuję chrząknięcie, wciąż się pojawia /usr/bin/env: node: No such file or directory

Co powinienem zrobić?

Rosamunda
źródło

Odpowiedzi:

793

Wykonanie dowiązania symbolicznego rozwiązuje problem:

ln -s /usr/bin/nodejs /usr/bin/node

(Dziękuję i głosuję +1 na odpowiedź bodokaiser ).

Rosamunda
źródło
97
sudo apt-get install nodejs-legacytworzy również ten link, patrz opis na packages.debian.org/sid/nodejs-legacy
anatoly techtonik
1
Dowiązanie symboliczne rozwiązało problem i pozwoliło zaoszczędzić dużo czasu na rozwój. Dzięki!
Farzad YZ
Ta poprawka poważnie ratuje życie. Zwłaszcza jeśli postępujesz zgodnie z przewodnikiem dotyczącym uprawnień do napraw
Josh Frankel
Dziękuję Ci! To uratowało moje popołudnie, próbując skonfigurować aplikację węzła w Google Cloud Linux.
jovan
1
Powinieneś użyć, which nodeaby uzyskać prawidłową ścieżkę do swojego węzła. Tak więc polecenie ln -s "$(which node)" /usr/bin/node
brzmiałoby
117

Problem nie dotyczy wersji węzła. Zamiast tego jest to sposób domyślnej instalacji NodeJS w Ubuntu. Podczas uruchamiania aplikacji Node w Ubuntu należy uruchomić nodejs somethign.jszamiastnode something.js

Więc nazwa aplikacji wywoływana w terminalu jest nodejsi nie node. Dlatego istnieje zapotrzebowanie na linku do przodu po prostu wszystkich poleceń otrzymanych jako nodecelu nodejs.

ln -s /usr/bin/nodejs /usr/bin/node
Muhammad bin Yusrat
źródło
6
Musisz uruchomić to polecenie z sudo, jeśli pojawia się błąd „ln: nie udało się utworzyć dowiązania symbolicznego” / usr / bin / node ”
Suraj Dubey,
ln -s / usr / bin / nodejs / usr / bin / node
rd_
54

Myślę, że powinieneś zaktualizować najnowszą wersję węzła

sudo npm cache clean -f
sudo npm install -g n
sudo n stable
vanlan228
źródło
1
Tylko wskazówka; wcięcie linii wiersza o 4 spacje;) również nnie jest poleceniem powiązanym z Node.JS.
Qix - MONICA ZOSTAŁ SZYBOWANY
@David na podstawie opisu pakietu w NPM : „Interaktywnie zarządzaj wszystkimi wersjami węzła”
frdmn,
Dla mnie rozwiązany problem
krytyk
skopiowałem laravelprojekt z windowsmaszyny na ubuntu 16.04i laravel mixmiałem problem z npm run watchAND I to rozwiązanie działało dla mnie, a teraz problem zniknął
AN
29

jeśli jesteś w stanie uzyskać dostęp do węzła na terminalu ubuntu za pomocą komendy nodejs, wówczas problem ten można po prostu rozwiązać za pomocą -utworzenia dowiązania symbolicznego nodejs i węzła za pomocą

ln -s /usr/bin/nodejs /usr/bin/node

i to może rozwiązać problem

Hiro
źródło
10

Po prostu zrób

$ sudo apt-get install nodejs-legacy

I zacznie działać.

Prabhu Nandan Kumar
źródło
9

Przekonałem się, że często jest to błąd w błędnej nazwie. Jeśli instalujesz z menedżera pakietów, bin może być nazywany nodejs, więc po prostu musisz go tak dowiązać

ln -s /usr/bin/nodejs /usr/bin/node
Ahmad Awais
źródło
1
Zamiast dodawać negatywne opinie, daj mi znać tutaj w komentarzu, co jest nie tak, żebym mógł Ci w tym pomóc. Ponieważ nie ma nic złego w tworzeniu dowiązania symbolicznego, zwłaszcza jeśli pomaga to lepiej zarządzać.
Ahmad Awais
1
Ja osobiście wolę takie podejście. To jest czyste.
Muhammad Gelbana
8

Jeśli masz już zainstalowanych nodejs (sprawdź za pomocą which nodejs) i nie chcesz instalować innego pakietu, możesz jako root:

update-alternatives --install /usr/bin/node node /usr/bin/nodejs 99
Tom Hale
źródło
To jest właściwy sposób Debiana.
Tonin
6

Kiedy korzystałem z łyka, dostałem ten błąd.

~$ gulp

/ usr / bin / env: 'node': Brak takiego pliku lub katalogu

Zostało to usunięte poprzez wykonanie następującego polecenia, należy pamiętać, że katalog / usr / bin ma wszystkie uprawnienia.

~$ ln -s /usr/bin/nodejs /usr/bin/node

to działa dla mnie ..

Naveen Gupta
źródło
5

W zależności od tego, jak zainstalowałeś swój węzeł, przez większość czasu może on nie znajdować się w / usr / bin /, w moim przypadku użyłem nvm do instalacji, więc mój węzeł był w wersji ./nvm/versions.

Za pomocą tego polecenia which nodeznalazłem ścieżkę, ale aby ułatwić pracę, możesz uruchomić to polecenie.

nodepath=$(which node); sudo ln -s $nodepath /usr/bin/node

powyższe polecenie pobierze lokalizację twojego węzła i utworzy dla ciebie link.

akisoft
źródło
5

Istnieją dwa rozwiązania tego:

a) Ustaw zmienną PATH tak, aby zawierała „/ usr / local / bin”

export PATH="$PATH:/usr/local/bin"

b) Utwórz dowiązanie symboliczne do „/ usr / bin”, które jest już w ŚCIEŻCE

ln -s /usr/bin/nodejs /usr/bin/node

Mam nadzieję, że to pomoże.

Pavel
źródło
4

Chociaż ln -sjest to oczywista najłatwiejsza poprawka, wyjaśnienie:

Z powodu konfliktu z innym pakietem plik wykonywalny z repozytoriów Ubuntu nazywa się nodejs zamiast node. Należy o tym pamiętać podczas uruchamiania oprogramowania.

Ta rada pojawia się podczas instalacji sudo apt-get install nodejs.

Tak więc inne znane narzędzie (nie wiem, co robi. Mimo że jest znane repozytoriom ubuntu, nie jest instalowane domyślnie w 16.04) zajmuje tę przestrzeń nazw.

Byłoby miło, gdyby Ubuntu doradził, jak to naprawić „czysto”, gdyby nie robiąc ręcznie, co inaczej zrobiłby pakiet. (kolizja pozostaje kolizją ... jeśli + kiedy to nastąpi)

Frank Nocke
źródło
1
@ tom-hale odpowiedzią na to jest Ubuntu. Używasz alternatyw, aby określić poprawny węzeł
kervin
2
sudo PATH="$PATH:/usr/local/bin" npm install -g <package-name>
KARTHIKEYAN.A
źródło
2

Dla mojego linku przypadku nie NIE działają następująco

ln -s / usr / bin / nodejs / usr / bin / node

Ale możesz otworzyć / usr / local / bin / lessc jako root i zmienić pierwszą linię z węzła na nodejs.

- #! / usr / bin / env node

+ #! / usr / bin / env nodejs

Tanvir Ahmad
źródło
2

Postępuj zgodnie z tymi poleceniami, aby rozwiązać problem.

W terminalu:

  1. Wyczyść całą pamięć podręczną NPM:

    $ sudo npm cache clean -f
  2. sudo npm install -g n
  3. Zainstaluj najnowszą stabilną wersję Node.js:

    sudo n stable

Teraz zainstalowano najnowszą wersję Node.js. Sprawdź wersję, używając:

node -v
Anandhu Raj
źródło
0

Wystarczy zmienić nazwę polecenia lub nazwę pliku za ln -s /usr/bin/nodejs /usr/bin/nodepomocą tego polecenia

Shalauddin Ahamad Shuza
źródło
0

Dla mnie zaakceptowana odpowiedź jeszcze nie zadziałała. Zacząłem zgodnie z sugestią tutaj:

ln -s /usr/bin/nodejs /usr/bin/node

Po wykonaniu tej czynności wystąpił następujący błąd:

/usr/local/lib/node_modules/npm/bin/npm-cli.js:85 Let Notifier = Require ('Update-Notifier') ({pkg}) ^^^

SyntaxError: Deklaracje o zasięgu blokowym (let, const, function, class) nie są jeszcze obsługiwane poza trybem ścisłym w exports.runInThisContext (vm.js: 53: 16) w Module._compile (module.js: 374: 25) w Object. Module._extensions..js (module.js: 417: 10) w Module.load (module.js: 344: 32) w Function.Module._load (module.js: 301: 12) w Function.Module.runMain ( module.js: 442: 10) przy uruchomieniu (node.js: 136: 18) w node.js: 966: 3

Rozwiązaniem było pobranie najnowszej wersji węzła z https://nodejs.org/en/download/ .

Potem zrobiłem:

sudo tar -xf node-v10.15.0-linux-x64.tar.xz --directory /usr/local --strip-components 1

Teraz aktualizacja zakończyła się pomyślnie: npm -vzmieniono z 3.2.1 na 6.4.1

Blackbam
źródło