Не удается установить пакеты с помощью диспетчера пакетов узла в Ubuntu

431

Имя интерпретатора NodeJS (node) на Ubuntu было переименовано в nodejs из-за конфликта имен с другим пакетом. Вот что говорит readme.debian:

Имя восходящего потока для команды интерпретатора Node.js: "node".   В Debian команда интерпретатора была изменена на "nodejs".

Это было сделано для предотвращения столкновения пространства имен: использование других команд   то же имя в их восходящих потоках, например ax25- node, из "node"   пакет.

Сценарии, вызывающие Node.js как команду оболочки, должны быть изменены вместо   используйте команду "nodejs".

Однако, используя nodejs, mucks пытается установить пакеты с помощью npm. Установка пакета завершается с ошибкой:

sh: 1: node: not found
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian

Как заставить npm понять, что nodejs уже установлен в системе, но имя интерпретатора отличается?

  • 29
    Вы можете попробовать ln -s nodejs node в /usr/bin . Это вроде взломать хотя.
  • 1
    @vbo вы можете добавить это как ответ - это решит проблему!
Показать ещё 3 комментария
Теги:
npm

18 ответов

986
Лучший ответ

TL; ДР:

sudo apt-get install nodejs-legacy

Прежде всего, позвольте мне немного уточнить ситуацию. Летом 2012 года разработчики Debian решили переименовать исполняемый файл Node.js для предотвращения столкновения пространства имен с другим пакетом. Это было очень сложное решение для Технического комитета Debian, поскольку оно нарушает обратную совместимость.

Ниже приводится цитата из проекта резолюции Комитета, опубликованная в Debian список рассылки:

  • Пакет nodejs должен быть изменен для предоставления /usr/bin/nodejs, а не /usr/bin/ node. Пакет должен объявить связь Breaks: любые пакеты в Debian, ссылающиеся на /usr/bin/ node.

  • Исходный пакет nodejs также должен предоставить двоичный пакет nodejs-legacy в Priority: extra, который содержит /usr/bin/ node как символическую ссылку на /USR/ бен/nodejs. Пакет в архиве не может зависеть от или рекомендовать пакет nodejs-legacy, который предоставляется исключительно для восходящего потока совместимость. В этом объявлении объявляется конфликт: отношения с пакетом node.

<... >

Пункт 2 является фактическим решением проблемы ОП. OP должен попытаться установить этот пакет вместо того, чтобы делать симлинк вручную. Вот ссылка на этот пакет в индексе пакета Debian веб-сайт.

Он может быть установлен с помощью sudo apt-get install nodejs-legacy.

Я не нашел никакой информации о принятии всего этого разработчиками NPM, но я думаю, что пакет npm будет исправлен в какой-то момент, а nodejs-legacy станет действительно устаревшим.

  • 104
    Подведем итог: sudo apt-get install nodejs-legacy
  • 56
    Мне нравятся ответы, которые объясняют ситуацию полностью, а не просто дают команду выполнить вслепую. Затем я могу скопировать эту информацию в комментарии в моем скрипте установки среды, чтобы я знал, что происходит через год, когда она не работает.
Показать ещё 11 комментариев
99

Попробуйте привязать node к nodejs. Сначала выясните, где nodejs

whereis nodejs

Затем мягкая ссылка node на nodejs

ln -s [the path of nodejs] /usr/bin/node 

Я предполагаю, что /usr/bin находится в вашем пути выполнения. Затем вы можете протестировать, введя node или npm в свою командную строку, и теперь все должно работать.

  • 3
    -s создает символическую ссылку (которая часто является предпочтительным выбором), а не жесткую ссылку.
  • 19
    Это работает, но ответ vbo об установке nodejs-legacy проще.
Показать ещё 7 комментариев
37

Вы также можете установить Nodejs, используя NVM или Nodejs Version Manager. Существует много преимуществ для использования версии менеджер. Один из них - вам не нужно беспокоиться об этой проблеме.


Инструкция:


sudo apt-get update
sudo apt-get install build-essential libssl-dev

После установки пакетов необходимых условий вы можете отключить установку nvm script на странице проекта GitHub. Номер версии может отличаться, но в целом вы можете загрузить и установить его со следующим синтаксисом:

curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh

Это загрузит script и запустит его. Он установит программное обеспечение в подкаталог вашего домашнего каталога в ~/.nvm. Он также добавит необходимые строки в ваш файл ~/.profile для использования файла.

Чтобы получить доступ к функциям nvm, вам нужно будет снова выйти и снова войти в систему, или вы можете указать файл ~/.profile, чтобы ваш текущий сеанс знал об изменениях:

source ~/.profile

Теперь, когда вы установили nvm, вы можете установить изолированные версии Node.js.

Чтобы узнать версии Node.js, доступные для установки, вы можете ввести:

nvm ls-remote
. . .

v0.11.10
v0.11.11
v0.11.12
v0.11.13
v0.11.14

Как вы можете видеть, самая новая версия на момент написания этой статьи - v0.11.14. Вы можете установить это, набрав:

nvm install 0.11.14

Обычно nvm переключается на использование последней установленной версии. Вы можете явно указать nvm на использование только что загруженной версии, набрав:

nvm use 0.11.14

При установке Node.js с использованием nvm исполняемый файл вызывается Node. Вы можете увидеть версию, которая в настоящее время используется оболочкой, набрав:

node -v

Учебник по кассете можно найти здесь

  • 3
    Это также исправило ошибку выше для меня. Это намного лучше для разработчика nodejs (на мой взгляд, все разработчики, я не тот, кто работает в nodejs). Я использовал это.
  • 1
    Мне нужно было мягко связать узел nvm с узлом usr/bin/node . Итак, запустил sudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node
Показать ещё 2 комментария
11
  • Установите nvm, используя сначала:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
    
  • Запустить команду

    source ~/.profile
    
  • Теперь запустите это, и на нем будут показаны все установленные или другие версии пакетов:

    nvm ls-remote
    
  • Установленные пакеты будут зелеными. Установите любую версию, которая вам нужна:

    nvm install 6.0.0
    
  • Проверьте, где не установлен:

    which node
    
  • Проверить текущую версию:

    node -v
    
    n=$(which node);
    n=${n%/bin/node}; 
    chmod -R 755 $n/bin/*; 
    sudo cp -r $n/{bin,lib,share} /usr/local
    
  • 2
    Я настоятельно рекомендую это решение, чтобы получить контроль над версией узла и npm в любое время и для любого использования.
9
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
source ~/.profile

Совмещенный принятый ответ с source ~/.profile из комментария, который был сложен, и некоторых команд очистки до этого. Скорее всего, вам также понадобится sudo apt-get install npm после.

6

В Linux Mint 17 я пробовал оба решения (создание символической ссылки или с помощью пакета nodejs-legacy) без успеха.

Единственное, что окончательно сработало для меня, было использование ppa от Криса Ли:

sudo apt-get purge node-*
sudo apt-get autoremove 
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

Установлена ​​ node версия 10.37 и npm 1.4.28. После этого я смогу установить пакеты по всему миру.

6

Вот еще один подход, который я использую, поскольку мне нравится n для удобного переключения между версиями node.

В новой системе Ubuntu сначала установите "system" node:

curl -sL https://deb.nodesource.com/setup | sudo bash -

Затем установите n-модуль по всему миру:

npm install -g n

Так как система node была установлена ​​первой (см. выше), альтернативная система может быть использована для чистой точки на node, предоставляемой n. Сначала убедитесь, что система альтернатив ничего не имеет для node:

update-alternatives --remove-all node

Затем добавьте node, предоставленный n:

update-alternatives --install /usr/bin/node node /usr/local/bin/node 1

Далее добавьте node, предоставляемый системой (тот, который был установлен с завитком):

update-alternatives --install /usr/bin/node node /usr/bin/nodejs 2

Теперь выберите node, предоставленный n, используя интерактивное меню (выберите /usr/local/bin/node в меню, представленном следующей командой):

update-alternatives --config node

Наконец, поскольку /usr/local/bin обычно имеет более высокий приоритет в PATH, чем /usr/bin, должен быть создан следующий псевдоним (введите в ваш .bashrc или .zshrc), если система альтернатив node должна быть эффективной; в противном случае node, установленный с n в /usr/local/bin, всегда имеет приоритет:

alias node='/usr/bin/node'

Теперь вы можете легко переключаться между версиями node с помощью n <desired node version number>.

5

Как уже упоминают другие люди, я предлагаю не использовать "sudo apt-get" для установки node или любой библиотеки разработки. Вы можете загрузить требуемую версию из https://nodejs.org/dist/v6.9.2/ и настроить собственную среду.

Я порекомендую такие инструменты, как nvm и n, чтобы управлять версией node. Очень удобно переключаться и работать с этими модулями. https://github.com/creationix/nvm https://github.com/tj/n

Или напишите базовый bash, чтобы загрузить zip/tar, извлечь папку перемещения и создать мягкую ссылку. Всякий раз, когда вам нужно обновить, просто укажите старую софт-ссылку на новую загруженную версию. Как я создал для себя, вы можете обратиться: https://github.com/deepakshrma/NodeJs-4.0-Reference-Guide/blob/master/nodejs-installer.sh

#Go to home
cd ~
#run command
#New Script
wget https://raw.githubusercontent.com/deepakshrma/NodeJs-4.0-Reference-Guide/master/nodejs-installer.sh 
bash nodejs-installer.sh -v lts
#here -v or --version can be sepecific to 0.10.37 or it could be latest/lts 
#Examples
bash nodejs-installer.sh -v lts
bash nodejs-installer.sh -v latest
bash nodejs-installer.sh -v 4.4.2
4

для меня проблема была решена,

sudo apt-get remove node
sudo apt-get remove nodejs
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo ln -s /usr/bin/nodejs /usr/bin/node
alias node=nodejs
rm -r /usr/local/lib/python2.7/dist-packages/localstack/node_modules
npm install -g npm@latest || sudo npm install -g npm@latest
3

Простое решение от здесь

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

Вы можете указать версию, изменив значение setup_x.x, например, setup_5.x

2

Ваша система не распознает путь node js binary.

1.which node

2. Затем софт-ссылку node на nodejs

ln -s [the path of nodejs] /usr/bin/node 

Я предполагаю, что /usr/bin находится в вашем пути выполнения. Затем вы можете протестировать, введя node или npm в свою командную строку, и теперь все должно работать.

2

Удалите все node версии, которые у вас есть

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

установить nvm (Node Менеджер версий) https://github.com/creationix/nvm

wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

Теперь вы можете установить любую версию node и переключиться между версиями.

  • 0
    К вашему сведению - любой, кто использует вышеуказанный метод, nvm , обратите внимание, что пакет nodejs-legacy v0.10.25. (или, по крайней мере, это то, что я увидел, когда попробовал.)
1

Для меня исправление удаляло пакеты node *, а также пакеты npm.

Затем новая установка:

sudo apt-get install autoclean
sudo apt-get install nodejs-legacy
npm install
  • 0
    sudo apt-get autoclean делает то же самое, что sudo apt-get install autoclean
1

Я установил его неявным /usr/sbin/ node (который связан с пакетом ax25- node), тогда я создал ссылку на nodejs, используя это в командной строке

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

Поскольку пакет, такой как карма, не работает с именем nodejs, но меняя первую строку кармы script с node на nodejs, но я предпочитаю решить эту проблему раз и навсегда

0

Это ваш node неправильно установлен, сначала вам нужно удалить node, а затем снова установить. Чтобы установить node, это может помочь вам http://array151.com/blog/nodejs-tutorial-and-set-up/

после этого вы можете легко установить пакеты. Чтобы установить пакеты, это может помочь вам

http://array151.com/blog/npm-node-package-manager/

0

Вы можете установить nodejs в свой Ubuntu Os, следуя этим

sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install build-essential
0

Проблема не в установщике
замените nodejs на node или измените путь из /usr/bin/nodejs на/usr/bin/node

0

вы можете создать ссылку ln -s nodejs node в /usr/bin надеюсь, что это решает вашу проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню