конфлікти 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.