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

32

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

  1. Обе машины возвращаются /usr/bin/nodeв ответ на which nodeкоманду. Однако такого файла нет на компьютере B.
  2. Выполнение команды nodeработает для компьютера A, а не B. На B я должен использовать nodejsвместо этого.
  3. На B есть двоичный файл с именем / sbin / node, у 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можно использовать.

Teetrinker
источник
Любая идея, почему мы должны установить это? Это фактически создает символическую ссылку как-то? Почему узел изменил имя своего исполняемого файла на 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пакет non-node.js . Хотя я сделал это apt-get remove nodeдо установки правильного nodejsпакета, я думаю, --purgeаргумент обязателен.

Справочная информация :

Существует конфликт имен с пакетом узла (программа любительского пакетного радиоузла), и двоичный файл nodejs был переименован из узла в nodejs. Вам нужно будет использовать символическую ссылку / usr / bin / node в / usr / bin / nodejs, или вы можете удалить программу любительского пакетного радиоузла, чтобы избежать этого конфликта.

Leftium
источник
Спасибо за справочную информацию. На данный момент у меня нет ни одной из этих машин, чтобы попробовать, но я надеюсь, что скоро смогу вернуться к ней.
Хай Вю
Это не поможет вам /usr/bin/nodeв Ubuntu 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пакета будет работать.
Leftium
1
Спасибо, это очень ясно. Действительно, это работает при установке nodejs-lecacyпакета, который может быть только символической ссылкой на nodejsисполняемый файл на самом деле ...
Августин Ридингер
11

К сожалению для меня, создание символической ссылки не работает. Что работало для меня, хотя создавал псевдоним. В ~/.bashrcили ~/.bash_aliases(если ~/.bashrcзагружает этот файл), просто добавьте следующую строку:

alias node="nodejs"

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

Aust
источник
2
Когда я создал символическую ссылку, она не работала, пока я не запустил другой терминал. Попробуйте перезапустить свой терминал ... или мой ответ, который работает без символических ссылок / псевдонимов ^^
Leftium
@Leftium: Вам также нужно запустить: source ~/.bashrcперезагрузить файл .bashrc (если вы хотите избежать перезапуска терминала) подробнее ..
Deepak Joy
Симлинкинг в новом месте почти наверняка требует hash nodeвызова в ваших существующих терминалах, потому что современные оболочки помнят местоположение команд, которые ранее были найдены в PATH. hashКоманда в таких встроенных оболочках говорят им повторить поиск, и запомнить новое место.
mtraceur
7

Я думаю, что это так:

Возможности обновления sudo --install / usr / bin / узел узла / usr / bin / nodejs 10

Использование альтернатив Debian.

user229115
источник
Спасибо. Это самый прямой способ исправить решение Ubuntu по этому вопросу.
Дрю
@ Похоже, что Ubuntu следовал решению Debian по этому вопросу, основанному на ошибке в Ubuntu bugs.launchpad.net/ubuntu/+source/node/+bug/1030421 .
Ллойд Дьюольф
1

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

Если вы устанавливаете node.js, используя метод рекомендуемого файла readme для установки github, рекомендуется следовать инструкциям, приведенным в статье блога nodeource , вместо установки из устаревшего репозитория apt-get, 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

Обратите внимание, что это для версии 0.12, которая, скорее всего, устареет в недалеком будущем.

Кроме того, если вы находитесь за корпоративным прокси (как я), вам нужно добавить опцию -E к команде sudo, чтобы сохранить переменные env, необходимые для прокси:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -
Erresen
источник
1

На Ubuntu 14.04 у меня была такая же проблема с узлом. У меня был не рабочий «узел», а работающий «узел». я только что сделал

sudo apt-get remove node

и сразу после этого, узел работал, и узелjs тоже работает :) Я новичок в 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/

Nick Indiessance
источник
1
-1 Нужна только tarкоманда sudo.
Муру
+1 Большое спасибо за этот лучший путь - лучший путь для меня!
1111161171159459134