nodejs против узла в Ubuntu 12.04


363

Я установил nodejs на Ubuntu из приведенных здесь инструкций

Когда я пишу node --versionв терминале, я вижу это:
-bash: /usr/sbin/node: No such file or directory

Я могу видеть узел в /usr/sbin/каталоге, хотя.

Написание npm --versionшоу 1.3.5
Написание nodejs --versionшоуv0.10.15

Также я вижу узел в /usr/bin/каталоге.

Итак, как мне nodeработать?

Также, если я использую zsh вместо bash, то nodeкоманда работает.


1
Если «вы видите узел в / usr / bin /», то каков результат ls -l /usr/bin/node?
рандунель

1
@randunel Я получил этот выводlrwxrwxrwx 1 root root 22 Jan 1 2013 /usr/bin/node -> /etc/alternatives/node
Jatin

Вносили ли вы какие-либо изменения в shell rc?
рандунель

Это похоже на проблему с оболочкой после редактирования, что export | grep PATHвыводит, когда не используется zsh? (он должен печатать /usr/binсреди прочего)
randunel

1
решение + объяснение здесь: stackoverflow.com/questions/21168141/…
throbi

Ответы:


599

Вам нужно вручную создать символическую ссылку /usr/bin/node. Ярлык для bash-совместимых оболочек:

sudo ln -s `which nodejs` /usr/bin/node

Или, если вы используете нестандартные оболочки, просто жестко закодируйте путь, который вы найдете which nodejs:

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

Позже редактировать

Я нашел это объяснение в ссылке, которую вы разместили

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

Позже позже редактировать

Прошло много времени с тех пор как я ответил на это. Хотя решение, которое я разместил здесь, работало для меня несколько раз, пользователи сообщили о нескольких других решениях в комментариях:

От @ user229115

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

От AskUbuntu (пользователь leftium)

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

Ладно! Хотя, если я использую zsh, то nodeкоманда работает.
Джатин

1
Кроме того, как мне удалить программу Amateur Packet Radio Node? Я пытался, sudo apt-get remove nodeно это говоритPackage node is not installed, so not removed
Джатин

Вам не нужно удалять его, после ваших комментариев это выглядит как проблема оболочки, а не проблема пакета узла.
рандунель

Ответ @ randunel не сработал для меня, так как /usr/bin/env nodeне сработает. Решение @ BennyMcBenBen сработало
francoisrv

2
Ответ @ Тино правильный, см nodejs-legacy. Описание пакета. Ответ, связанный @BennyMcBenBen, также был обновлен аналогичными инструкциями.
Трикасс

88

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

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

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


3
Похоже, это лучший вариант, чем принятый ответ: он не изменяет вручную папку / usr / bin / и использует инфраструктуру для альтернативных команд
Доминик Фрец,

Я не пробовал, но я посмотрел на update-alternativeдокументы. Если это действительно работает, то это лучшее решение :)
randunel

3
Можете ли вы быть более конкретным относительно того, что это делает?
bcorso

@DominikFretz Мех. Конечный результат точно такой же, если использовать специфичную для Debian команду и POSIX-совместимую. (Вы могли бы сделать update-alternatives --install /usr/local/bin/fribjazt node /usr/bin/nodejs 10.) Каждому свое, но я предпочитаю равнину ln.
Кодзиро

2
Я должен был, чтобы source ~/.bashrcэто вступило в силу
iNulty

64

Видимо, решение отличается в разных версиях Ubuntu. Следующее работает для меня на Ubuntu 13.10:

sudo apt-get install nodejs-legacy

НТН

Изменить: правило:

Если вы установили, nodejsно отсутствует /usr/bin/nodeдвоичный файл, то также установите nodejs-legacy. Это просто создает недостающую мягкую ссылку.

В соответствии с моими тестами, Ubuntu 17.10 и выше уже имеет совместимость-softlink /usr/bin/nodeна месте после nodejsустановки, поэтому nodejs-legacyотсутствует в этих выпусках, так как больше не нужен.


кажется, что nodejs-legacy больше не поддерживается. последняя сборка останавливается на 2013-04-10
francoisrv

8
nodejs-legacyне нужно много поддержки. Это просто добавляет мягкую ссылку, похожую sudo ln -s nodejs /usr/bin/node, по крайней мере, на LTS 14.04
Tino

4
В Ubuntu 14.04 nodejs и nodejs-legacy устанавливают одну и ту же версию Node (0.10.25). +1 к @Tino.
Марк Э. Хаас

У меня работает и в Debian Jessie. Это должен быть принятый ответ, поскольку так все должно быть. Только люди, использующие радиолюбительский пакет, не должны этого делать. Мне интересно, почему они не переименовали радиопакет, как они сделали с chromium-bsu.
Жером

Это приведет к 2 экземплярам узла в вашей системе, и это больше не поддерживается ... Рекомендуем вместо этого ссылаться на nodejs.
PodTech.io

30

У меня такая же проблема в Ubuntu 14.04.

Я установил «nodejs», и он работает, но только если я использую команду «nodejs». Если я пытаюсь использовать «узел», ничего не происходит.

Я исправил эту проблему следующим образом:

  1. Установите nodejs-legacy

    sudo apt-get установить nodejs-legacy

После этого, когда я набираю «узел» в командной строке, я получаю сообщение об ошибке «/ usr / sbin / node: нет такого файла или каталога»

  1. Во-вторых, то, что я сделал, это символическая ссылка на "nodejs":

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

4
В вашей системе есть что-то странное. nodeдолжен быть установлен в /usr/bin/и нет /usr/sbin/. Это выглядит для меня , как если бы вы установили Ubuntu nodeпакет из радиолюбителей ранее (см packages.ubuntu.com/trusty/all/node/filelist ) и забыли запустить hash -rна уровне оболочки, так что оболочка до сих пор помнит неправильный путь. Второй lnисправил это, но он больше не нужен после того, как вы покинете оболочку.
Тино

Кстати, даже неправильные ответы полезны, чтобы объяснить все проблемы из-за трех пакетов, все очень похожих имен: node( /usr/sbin/nodeдля чего-то совершенно другого), nodejs( /usr/bin/nodejs) и nodejs-legacy( /usr/bin/node, зависит от пакета nodejs).
Тино

Это случилось и со мной. Я установил узел из источника некоторое время назад. node -v => 0.10.2в то время nodejs -v => 5.5.0. Запуск команды which nodeвсегда указывал на эту локальную установку. В итоге мне пришлось unset NODE_PATH, что указывало на локальную установку, чтобы это исправить. После этого node -v => 5.5.0и npm install начали работать пакеты в зависимости от Node => 5.0.
CHsurfer

11

Это случилось и со мной.

node -v => 0.10.2
nodejs -v => 5.5.0

Проблема была в том, что я установил узел из источника некоторое время назад. Бег

which node

всегда указывал на эту локальную установку. Также,

echo NODE_PATH

указал на локальную установку.

удаление каталога с исходной установкой не помогло. Это просто сломало команду узла. В конце концов, сброс переменной среды NODE_PATH и очистка, а затем переустановка nodejs сделали свое дело.

unset NODE_PATH
sudo apt-get --purge remove nodejs
sudo apt-get install nodejs

После этого,

node -v => 5.5.0

и npm install начал работать для пакетов в зависимости от Node => 5.0.


Это сработало для меня. Жаль, что я бездельничал час, прежде чем нашел его.
Дастин Фрейкер

11

Диспетчер версий узлов (nvm)

Если вы хотите установить несколько версий nodejs и легко переключаться между ними, я бы предложил использовать Node Version Manger . Это также решает проблему именования ( nodeпротив nodejs)

Все довольно просто:

Установите версию nodejs:

$ nvm install 4.4

Теперь у вас есть nodejs 4.4 в дополнение к уже установленной версии, и вы можете просто использовать nodeкоманду для доступа к недавно установленной версии:

$ node -v    // The new version added by nvm.
v4.4.5
$ nodejs -v  // The OS version is untouched and still available.
v0.10.25

Вы можете установить больше версий nodejs и легко переключаться между ними:

$ nvm install 6.2
$ nvm use 6.2
Now using node v6.2.1 (npm v3.9.3)
$ node -v
v6.2.1
$ nvm use 4.4
Now using node v4.4.5 (npm v2.15.5)

2
Это помогает устранить проблему, спасибо много, я нашел некоторые полезные команды для nvmна том , как установить Node.js на сервере Ubuntu 14.04
Зуй Нгуен

1
это сработало для меня. Также руководство доступно здесь: digitalocean.com/community/tutorials/…e.
Коен Корнелис,

10

Я новичок во всем этом, но для меня простой псевдоним работал:

alias node='env NODE_NO_READLINE=1 rlwrap nodejs'

по крайней мере, для запуска вещей непосредственно в bash и выполнения файлов .js.


Работал без rlwrap. Спасибо!
Шурик

Спасибо @Phill, ты потрясающий!
Yusril Herlian Syah

9

Как насчет использования официальных инструкций с сайта nodejs :

Для v7:

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs

Для v6:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

Для v4:

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

Я тестировал их из Windows bash (через подсистему для Linux - 14.04) и raspbian (на основе ARM Debian). Запуск sudo apt-get install -y nodejsбез предварительного запуска установочного скрипта приведет к получению узла 0.10.

Если вы планируете установить собственные модули npm, требующие сборки, также запустите:

sudo apt install -y build-essential

Примечание: это рекомендуемый путь для любого дистрибутива на основе Debian для всех архитектур.


7

Добавление к правильному ответу @ randunel (пока не могу комментировать SO):

Мне также пришлось использовать символическую ссылку / usr / local / bin / node на / usr / bin / nodejs.

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

Очевидно, это переопределяло команду / usr / bin / node.

Не знаю, как это получилось, но надеюсь, что это поможет кому-то другому, так как было больно понять, почему вышеупомянутое не работает для меня.


7

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

Если вы устанавливаете 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 -



4

Если вы работаете с экземпляром AWS EC2, на котором запущен экземпляр Ubuntu (протестирован на Ubuntu 16.x), то эти шаги могут работать для вас:

    sudo apt-get update
    sudo apt-get --purge удалить узел -y
    sudo apt-get --purge удалить nodejs -y
    sudo apt-get --purge удалить legacy-node -y
    sudo rm / usr / bin / node
    curl -sL https://deb.nodesource.com/setup_6.x | Судо Баш -
    sudo apt-get установить nodejs -y
    узел -v

Если все правильно, последняя команда должна иметь вывод типа: v6.xx

Если нет, то выполните следующее:

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

Надеюсь, это поможет. Это помогло мне волшебным образом (хе-хе).


3

У меня была такая же проблема, символическая ссылка помогла мне: sudo ln -s / usr / bin / nodejs / usr / bin / node после этого sudo npm install -g phantomjs-prebuilt

прошло гладко


2

Лучший способ установить nodejs - через NVM (Node Version Manager)

Удалить предыдущие версии:

$ sudo apt-get purge node
$ sudo apt autoremove

Также удалите все node_modules $ sudo rm -rf node_modulesв каталоге, содержащем эту папку.

Node & Nodejs технически одно и то же. Просто название изменилось.

Сначала установите или обновите nvm

бежать от имени root

$ sudo su 

затем

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.7/install.sh | удар

ИЛИ

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.7/install.sh | удар

Проверьте NVM к пути

$ source ~ / .profile
$ nvm ls-remote

если вы получили сообщение об ошибке, установите git.

$ sudo apt-get install git

Перезапустить:

$ nvm ls-remote
ИЛИ
$ sudo nvm ls-remote

$ nvm установить нужную вам версию 

Проверка версии

# node --version
NVM использовать версию, которую вы требуете

ИНФОРМАЦИОННЫЙ КУРТЕС:

https://www.digitalocean.com/community/tutorials/how-to-install-node-js-with-nvm-node-version-manager-on-a-vps


1

Я создал символическую ссылку, но она все еще не работала.

Я забыл перезапустить свой терминал (соединение с замазкой). После того, как у меня это работало без символической ссылки :)


1

Будет полезно для начинающих

Хотя, вы получили ответ, просто хотели указать, что nodeкоманда (без каких-либо параметров) запустит узел в режиме REPL read-eval-print-loop для выполнения необработанного кода javascript.

Другой способ использовать nodeкоманду - предоставить ей jsфайл в качестве параметра. Вот как мы в основном используем это.


0

Не обязательно удалять существующие node и nodejs, но нужно альтернативно установить последнюю версию 7.x nodejs.

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs

0

Просто используйте NVM (Node Version Manager) - https://github.com/creationix/nvm

Это стало стандартом для управления Node.js.

Когда вам нужна новая версия:

nvm install NEW_VER
nvm use XXX

Если что-то пойдет не так, вы всегда можете вернуться с

nvm use OLD_VER


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.