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

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

восходящее имя узла.команда интерпретатора js - "узел". В Debian команда интерпретатора была изменена на"nodejs".

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

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

однако, используя nodejs гадости до установки пакетов с помощью 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 уже установлен в системе, но имя интерпретатора отличается?

17 ответов


TL; DR:

sudo apt-get install nodejs-legacy

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

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

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

  2. исходный пакет nodejs также должен предоставить двоичный пакет NodeJS-legacy с приоритетом: extra, который содержит/usr/bin / node в качестве символической ссылки на / usr/bin / nodejs. Ни один пакет в архиве не может зависеть или рекомендовать в nodejs-наследие пакет, который предоставляется исключительно для upstream
    совместимость. Этот пакет объявляет также объявляет коллизии: связь с пакетом узла.

<...>

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

его можно установить используя sudo apt-get install nodejs-legacy.

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


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

whereis nodejs

затем узел мягкой связи с nodejs

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

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


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


инструкции:


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

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

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

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

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

source ~/.profile

теперь, когда у вас установлен nvm, вы можете установить изолированный узел.версии 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

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

node -v

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


  1. установить nvm первым использованием:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
    
  2. выполнить команду

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

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

    nvm install 6.0.0
    
  5. проверьте, где не установлен:

    which node
    
  6. посмотреть версия:

    node -v
    
    n=$(which node);
    n=${n%/bin/node}; 
    chmod -R 755 $n/bin/*; 
    sudo cp -r $n/{bin,lib,share} /usr/local
    

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 после.


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

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

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

установить n модуль глобально:

npm install -g n

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

update-alternatives --remove-all node

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

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

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

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

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

update-alternatives --config node

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

alias node='/usr/bin/node'

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


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

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

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

единственное, что наконец-то сработало для меня, это использование ppa от Chris Lea:

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

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


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

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

или напишите basic bash, чтобы загрузить zip / tar, извлечь папку move и создать мягкую ссылку. Всякий раз, когда вам нужно обновить, просто укажите старую мягкую ссылку на новую загруженную версию. Как я создал для себя, вы можете ссылаться: 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

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

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

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


удалить любой узел версии

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

установить nvm (диспетчер версий узлов)https://github.com/creationix/nvm

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

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


ваша система не может обнаружить двоичный путь узла js.

1.какой узел

2.Затем узел мягкой ссылки на nodejs

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

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


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

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

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


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

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

sudo apt-get install autoclean
sudo apt-get install nodejs-legacy
npm install

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


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


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

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

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