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

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

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

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

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

19 ответов

Решение

TL;DR:

sudo apt-get install nodejs-legacy

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

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

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

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

<...>

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

Может быть установлен с помощью 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 Version Manager. Использование менеджера версий дает множество преимуществ. Одним из них является то, что вам не нужно беспокоиться об этой проблеме.


Инструкции:


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, вам нужно выйти и снова войти в систему, или вы можете получить файл ~/.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

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

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

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

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

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

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

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

update-alternatives --config node

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

alias node='/usr/bin/node'

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

В 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

Это установленный узел версии 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

Или напишите базовый 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

Простое решение отсюда

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

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

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

1. какой узел

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

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

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

Удалите любую версию вашего узла

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

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

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

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

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

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

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

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

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

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

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

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

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

Столкнулся с той же проблемой, шаги ниже сработали для меня.

Установите curl в своей системе, затем запустите сценарий установки NVM.

      sudo apt install curl 
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash

Загрузите среду

      source ~/.profile 

Установите поддерживаемую версию Node.js.

      nvm install 16.15.1

Подтвердите установку

      node -v
      node -v  // first check it's install or not
npm -v
sudo apt install npm
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash –
sudo apt-get install nodejs

затем проверьте

      node -v or node –version
npm -v or npm –version

или вы можете удалить файл package.lock json / node_modules, чем запустить npm i

Я надеюсь, что это будет работать нормально

шаги: https://www.geeksforgeeks.org/installation-of-node-js-on-linux/

Другие вопросы по тегам