konflikty node.js: / sbin / node vs / usr / bin / node

32

Mam dwie maszyny Ubuntu 12.10: maszyna A to VMWare VM, a maszyna B to stary laptop Acer. Na obu komputerach zainstalowałem węzeł za pomocą apt-get. Jednak komputer A instaluje główny plik binarny jako, /usr/bin/nodea komputer B jako /usr/bin/nodejs. Oto niektóre zachowania, które zaobserwowałem:

  1. Oba urządzenie powraca /usr/bin/nodew odpowiedzi na which nodepolecenie. Jednak nie ma takiego pliku na komputerze B.
  2. Wydanie polecenia nodedziała na maszynie A, a nie na B. Na B muszę użyć nodejszamiast tego.
  3. Na B znajduje się plik binarny o nazwie / sbin / node, A go nie ma.

Te zachowania powodują problem z niespójnością podczas programowania na obu komputerach. Na razie pracowałem nad tym, zmieniając nazwy plików binarnych na B jako takie:

sudo mv /sbin/node /sbin/node-sbin
sudo ln -s /usr/bin/nodejs /usr/bin/node

Czy istnieje sposób, aby to naprawdę naprawić, aby węzeł został zainstalowany jako /usr/bin/nodezamiast /usr/bin/nodejs?

Hai Vu
źródło

Odpowiedzi:

15

Na Ubuntu 13.10 wszystkie powyższe odpowiedzi nie działały dla mnie. W końcu zadziałało, gdy zainstalowałem nodejs-legacy

sudo apt-get install nodejs-legacy

Poprawnie /usr/bin/nodemi to zapewniło , dzięki czemu nodemonmożna np . Użyć.

Teetrinker
źródło
Masz pomysł, dlaczego musimy to zainstalować? Czy to rzeczywiście tworzy link symboliczny? Dlaczego węzeł zmienił nazwę swojego pliku wykonywalnego na nodejs?
Augustin Riedinger
Nazwa „node” była w konflikcie z dużo starszym programem. Zobacz wykaz.debian.org/debian-devel-announce/2012/07/msg00002.html i odpowiedź Leftium poniżej.
Robie Basak
36

aktualizacja: zmodyfikowano poniższe instrukcje, aby użyć nodejs-legacypakietu. ( więcej informacji o starszym węźle )

Spróbuj całkowicie usunąć pakiet węzła powodującego konflikt:

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy

# Confirm it worked
node --version       # v0.10.13
ls -la `which node`  # ... /usr/bin/node -> /etc/alternatives/node

Zdarzyło mi się to, gdy nieświadomie zainstalowałem nodepakiet inny niż node.js. Chociaż zrobiłem to apt-get remove nodeprzed zainstalowaniem poprawnego nodejspakietu, chyba --purgeargument jest wymagany.

Informacje w tle :

Wystąpił konflikt nazewnictwa z pakietem węzła (program amatorskiego pakietu radiowego węzła), a nazwa pliku binarnego nodejs została zmieniona z węzła na nodejs. Będziesz musiał dowiązać symbolicznie / usr / bin / node do / usr / bin / nodejs lub możesz odinstalować program węzła radiowego pakietu amatorskiego, aby uniknąć tego konfliktu.

Leftium
źródło
Dziękuję za informacje w tle. W tym momencie nie mam żadnej z tych maszyn do wypróbowania, ale mam nadzieję, że wkrótce wrócę.
Hai Vu
Nie dostaniesz tego /usr/bin/nodew Ubuntu 13.10. Odpowiedź @ user229115 poniżej działa jednak.
Jim Stewart
1
Tak więc z Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacydostaniesz nodeplik binarny jako node.js. Ale jeśli już zainstalowałeś node(program amatorskich pakietów węzłów radiowych), oczywiście musisz go usunąć.
jonasfj
1
@AugustinRiedinger: Zaktualizowałem swoją odpowiedź. Myślę, że połączenie zarówno czyszczenia „źle skonfigurowanych” pakietów, jak i instalacji nodejs-legacypakietu będzie działać.
Leftium
1
Dzięki, to jest bardzo jasne. Rzeczywiście działa to podczas instalowania nodejs-lecacypakietu, który w rzeczywistości może być tylko dowiązaniem symbolicznym do nodejspliku wykonywalnego ...
Augustin Riedinger
11

Niestety dla mnie tworzenie dowiązania symbolicznego nie działało. Jednak działało dla mnie stworzenie aliasu. W ~/.bashrclub ~/.bash_aliases(jeśli ~/.bashrcładuje ten plik), po prostu dodaj następujący wiersz:

alias node="nodejs"

Uruchom ponownie sesję bash, pisząc bashw konsoli, a Twój alias będzie teraz działał.

Aust
źródło
2
Kiedy utworzyłem dowiązanie symboliczne, nie działało, dopóki nie uruchomiłem innego terminala. Spróbuj ponownie uruchomić terminal ... lub moja odpowiedź, która działa bez dowiązań symbolicznych / aliasów ^^
Leftium
@Leftium: Musisz również uruchomić: source ~/.bashrcaby ponownie załadować plik .bashrc (jeśli chcesz uniknąć ponownego uruchamiania terminala) czytaj więcej ..
Deepak Joy
Symlinkowanie w nowej lokalizacji prawie na pewno wymaga hash nodewywołania w istniejących terminalach, ponieważ nowoczesne powłoki pamiętają lokalizację poleceń, które były wcześniej wyszukiwane w PATH. hashPolecenie wbudowane w takich skorup mówi im przerobić odnośnika, i zapamiętać nową lokalizację.
mtraceur
7

Myślę, że to jest to:

sudo update-alternatives --install / usr / bin / node node / usr / bin / nodejs 10

Korzystanie z alternatyw Debiana.

użytkownik229115
źródło
Dzięki. Jest to najbardziej bezpośredni sposób na zaradzenie decyzji Ubuntu w tej sprawie.
Drew,
@drew wygląda na to, że Ubuntu podążył za tym decyzją Debiana na podstawie błędu Ubuntu bugs.launchpad.net/ubuntu/+source/node/+bug/1030421 .
Lloyd Dewolf
1

Późna odpowiedź, ale dla aktualnych informacji ...

Jeśli instalujesz node.js przy użyciu metody zalecanej z pliku readme instalacji github dla węzła , sugeruje to postępowanie zgodnie z instrukcjami w artykule na blogu nodesource , zamiast instalowania z nieaktualnego repozytorium apt-get, node.js powinien uruchomić się za pomocą nodepolecenia, a także nodejspolecenie, bez konieczności tworzenia nowego dowiązania symbolicznego.

Ta metoda z artykułu to:

# Note the new setup script name for Node.js v0.12
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

Pamiętaj, że dotyczy to wersji v0.12, która prawdopodobnie stanie się nieaktualna w niedalekiej przyszłości.

Ponadto, jeśli jesteś za korporacyjnym proxy (takim jak ja), będziesz chciał dodać opcję -E do polecenia sudo, aby zachować zmienne środowiskowe wymagane dla proxy:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -
Erresen
źródło
1

Na Ubuntu 14.04 miałem ten sam problem z węzłem. Nie działałem „węzeł”, a działałem „nodejs”. właśnie zrobiłem

sudo apt-get remove node

a zaraz potem węzeł działał, a także nodejs :) Jestem nowy w Linuksie i to jest dla mnie błąd. Jednak Bower działa !!!

Georgi Danchev
źródło
0
sudo getconf LONG_BIT
sudo uname -p
  • Potwierdź architekturę procesora
  • Znajdź swoją dystrybucję node.js w drzewie katalogów na https://nodejs.org/dist/ (uwaga: różne wersje różnych dystrybucji node.js dla różnych architektur CPU)

Mój pulpit to obecnie Ubuntu 15.10 AMD64, więc użyję następującego adresu URL w moim przykładzie instalacji (ponownie, dystrybucja różni się):

sudo wget https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x64.tar.gz

Następnie zmień katalog na swoim katalogu pobierania:

sudo cd /home/name/Downloads

Z katalogu pobierania wykonaj następujące czynności:

sudo tar -C /usr/local --strip-components 1 -xzf node-v5.0.0-linux-x64.tar.gz

Potwierdź instalację pliku node.js, wykonując następujące czynności:

sudo ls -l /usr/local/bin/node
sudo ls -l /usr/local/bin/npm

ref. http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/

nick nick
źródło
1
-1 Potrzebne jest tylko tarpolecenie sudo.
mur
+1 Dziękuję bardzo za ten lepszy sposób - najlepszy sposób dla mnie!
1111161171159459134