конфлікти node.js: / sbin / node vs / usr / bin / node


32

У мене є дві машини Ubuntu 12.10: машина A - це VMWare VM, а машина B - і старий ноутбук Acer. На обох машинах я встановив вузол за допомогою apt-get. Однак машина A встановлює основний двійковий файл як /usr/bin/nodeі B як /usr/bin/nodejs. Ось деякі форми поведінки, які я спостерігав:

  1. Обидві машини повертаються /usr/bin/nodeу відповідь на which nodeкоманду. Однак на машині B. такого файлу немає.
  2. Видача команд nodeпрацює для машини A, а не B. На B, я повинен використовувати nodejsзамість цього.
  3. На B є двійковий, який називається / sbin / вузол, A його немає.

Ці поведінки викликають проблеми неузгодженості при розробці на обох машинах. Наразі я займався перейменуванням бінарних файлів на B як таких:

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

Чи є спосіб реально це виправити, щоб вузол був встановлений як /usr/bin/nodeзамість /usr/bin/nodejs?

Відповіді:


15

У Ubuntu 13.10 всі відповіді вище для мене не працювали. Це нарешті спрацювало, коли я встановив nodejs-legacy

sudo apt-get install nodejs-legacy

Це правильно було передбачено /usr/bin/nodeдля мене, так що, наприклад, nodemonможна використовувати.


Будь-яка ідея, навіщо нам це встановлювати? Чи насправді це якось створює симпосилання? Чому вузол змінив ім'я свого виконуваного файлу на nodejs?
Августин Рідінгер

Назва "вузол" суперечило набагато старшій програмі. Див lists.debian.org/debian-devel-announce/2012/07/msg00002.html і Leftium відповідають нижче.
Робі Басак

36

оновлення: модифіковані інструкції нижче для використання nodejs-legacyпакета. ( Докладніше про застарілий вузол )

Спробуйте повністю видалити конфліктуючий пакет вузлів:

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

Це сталося зі мною, коли я мимоволі встановив nodeпакет не-node.js . Хоча я робив apt-get remove nodeперед встановленням правильного nodejsпакету, я думаю, --purgeаргумент потрібен.

Довідкова інформація :

Виникає конфлікт імен з пакетом вузлів (Amateur Packet Radio Node Program), і двійковий код nodejs був перейменований з вузла на nodejs. Вам потрібно буде посилати / usr / bin / node на / usr / bin / nodejs, або ви можете видалити програму радіовузла Amateur Packet Radio, щоб уникнути цього конфлікту.


Дякую за основну інформацію На даний момент у мене немає жодної з цих машин для випробування, але я сподіваюся, що скоро зможу переглянути.
Хай Ву

Це не допоможе вам отримати /usr/bin/nodeUbuntu 13.10. Однак відповідь @ user229115 працює нижче.
Джим Стюарт

1
Так що з Ubuntu 13.10 sudo apt-get install nodejs nodejs-legacyви отримаєте nodeдвійковий файл як node.js Але якщо ви вже встановили node(Amateur Packet Radio Node Program), вам, очевидно, потрібно буде її видалити.
jonasfj

1
@AugustinRiedinger: Я оновив свою відповідь. Я думаю, що комбінація як очищення "неправильно налаштованих" пакетів, так і встановлення nodejs-legacyпакета буде працювати.
Лефтій

1
Спасибі це дуже зрозуміло. Дійсно, це працює при встановленні nodejs-lecacyпакету, який може бути лише символьним посиланням на nodejsвиконуваний файл ...
Августин Рідінгер

11

На жаль, створити симпосилання не вийшло. Що для мене працювало, хоча створював псевдонім. У ~/.bashrcабо ~/.bash_aliases(якщо ~/.bashrcзавантажується цей файл), просто додайте такий рядок:

alias node="nodejs"

Перезапустіть баш-сесію, ввівши bashв консоль, і ваш псевдонім тепер працюватиме.


2
Коли я створив симпосилання, воно не спрацювало, поки я не запустив інший термінал. Спробуйте перезапустити свій термінал ... або моя відповідь, що працює без символьних посилань / псевдонімів ^^
Leftium

@Leftium: Вам також потрібно запустити: source ~/.bashrcперезавантажити файл .bashrc (якщо ви хочете уникнути перезавантаження терміналу) читати далі ..
Deepak Joy

Повідомлення на новому місці майже напевно потребує hash nodeвиклику у ваших існуючих терміналах, оскільки сучасні оболонки пам'ятають розташування команд, які раніше були шукані в PATH. hashКоманда в таких вбудованих оболонках кажуть їм повторити пошук, і запам'ятати нове місце.
mtraceur

7

Я думаю, що це все:

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

Використання альтернатив Debian.


Спасибі. Це найбільш прямий спосіб виправити рішення Ubuntu з цього приводу.
Дрю

@drew, схоже, Ubuntu слідував за рішенням Debian на основі помилки Ubuntu bugs.launchpad.net/ubuntu/+source/node/+bug/1030421 .
Ллойд Девульф

1

Пізня відповідь, але для актуальної інформації ...

Якщо ви встановлюєте node.js за допомогою рекомендованого методу з readme установки вузла github , він пропонує виконувати вказівки в статті блогу nodesource , а не встановлювати з застарілого apt-get repo, node.js слід запускати за допомогою nodeкоманди, а також nodejsкоманда, без необхідності робити нове символьне посилання.

Цей метод із статті:

# 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

Зауважте, що це стосується версії 12, яка, швидше за все, застаріє в недалекому майбутньому.

Крім того, якщо ви стоїте за корпоративним проксі (як я), ви хочете додати параметр -E до команди sudo, щоб зберегти env vars, необхідні для проксі:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -

1

У ubuntu 14.04 у мене була така ж проблема із вузлом. У мене працювали не «вузол», а працюючі «вузли». я тільки що зробив

sudo apt-get remove node

і відразу після цього вузол працює, і nodejs також працює :) Я новачок у Linux, і це для мене загадка. Однак Бауер працює !!!


0
sudo getconf LONG_BIT
sudo uname -p
  • Підтвердьте свою архітектуру процесора
  • Знайдіть свій розподіл node.js в дереві каталогів за адресою https://nodejs.org/dist/ (зверніть увагу: різні версії різних дистрибутивів node.js для різних архітектур процесора)

В даний час на моєму робочому столі є Ubuntu 15.10 AMD64, тому я буду використовувати приклад встановлення наступної URL-адреси (знову ж, варіюється дистрибутив):

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

Потім змініть каталог в вашу директорію завантаження:

sudo cd /home/name/Downloads

У каталозі завантажень виконайте такі дії:

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

Підтвердьте встановлення node.js таким чином:

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

реф. http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/


1
-1 Потрібна лише tarкоманда sudo.
муру

+1 Щиро дякую за той кращий шлях - найкращий спосіб для мене!
1111161171159459134
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.