Неможливо встановити пакети за допомогою диспетчера пакетів вузлів в Ubuntu


500

Ім'я інтерпретатора NodeJS ( node) в Ubuntu було перейменовано nodejsчерез конфлікт імен з іншим пакетом. Ось що читає. Дебіан каже:

Ім'я висхідного потоку для команди інтерпретатора Node.js - "вузол". У Debian команду інтерпретатора було змінено на "nodejs".

Це було зроблено для запобігання зіткнення простору імен: інші команди використовують те саме ім'я у своєму потоці, наприклад, ax25-вузол з пакету "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 вже встановлений у системі, але назва інтерпретатора інша?


29
Ви можете спробувати ln -s nodejs nodeв /usr/bin. Це свого роду хак.
vbo

1
@vbo ви можете додати це як відповідь - це вирішить проблему!
Хімель Наг Рана

2
@HimelNagRana ​​У мене є ще одна (краще, прийнята) відповідь. Мій початковий коментар також був перетворений у відповідь ( stackoverflow.com/a/21168305/539686 ).
vbo

4
Використовуйте NVM для встановлення та керування версіями Node.js, github.com/creationix/nvm , це просто та зручно!
Unitech

2
Я настійно рекомендую це рішення: stackoverflow.com/a/38325376/3197383, щоб отримати контроль над версією вузла та npm у будь-який час та для будь-якого використання.
Ремі Бехерас

Відповіді:


1094

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, у пріоритеті: додатковий, який містить / usr / bin / вузол як символьне посилання на / usr / bin / nodejs. Жоден пакет в архіві не може залежати від або рекомендувати застарілий пакет nodejs, який надається виключно для
    сумісності з потоком . Цей пакет оголошує також оголошує конфлікт: зв'язок з вузлом пакету.

<...>

Пункт 2 є фактичним вирішенням питання ОП. ОП має спробувати встановити цей пакет, а не робити символьне посилання вручну. Ось посилання на цей пакет на веб-сайті індексу пакунків Debian .

Його можна встановити за допомогою sudo apt-get install nodejs-legacy .

Я не знайшов жодної інформації про прийняття всієї справи розробниками NPM, але, думаю, npmпакет буде виправлений на певний момент і nodejs-legacyстане справді спадщиною.


106
Підводячи підсумок:sudo apt-get install nodejs-legacy
Альф Етон

58
Мені подобаються відповіді, які грунтовно пояснюють ситуацію, а не просто дають команду виконувати сліпо. Тоді я можу скопіювати цю інформацію в коментарі до мого сценарію налаштування навколишнього середовища, щоб я знав, що відбувається за рік, коли це не працює.
Mnebuerquo

29
Як людина, мені здається, незручно незрозуміло, що вузол - це не вузол, а замість nodejs - лише на Debian. Насправді, справді, насправді дуже дивно нерозумно використовувати такі інструменти розвитку. В основному, це рішення створило виняткову ситуацію для Debian у КОЖНОМУ ПАКЕТІ NODEJS! Я ніколи не чув про те, що "вузол" робить інакше, тому мені не вистачає симпатій; (
Lodewijk

4
Якщо я щось не пропускаю, це не було зіткнення простору імен . Тут немає простору імен , це було просто зіткнення імен . Пробіли імен дозволяють мати те саме ім’я двічі (або більше), якщо кожен існує в іншому просторі імен . Немає таких "пробілів" для імен виконуваних файлів в Linux або Unix. Найближче те, що ви можете мати кілька каталогів у вашій змінній $ PATH, і використовується найдавніший із відповідним виконавчим файлом. (Але це насправді дуже відрізняється від простору імен.)
iconoclast

7
Це дуже дратує, тим більше, що конфлікт імен був із "Аматорським пакетним радіо" .
Сузана

113

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

whereis nodejs

Потім м'який вузол посилання на nodejs

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

Я припускаю, що / usr / bin знаходиться у вашому шляху виконання. Потім ви можете протестувати, ввівши node або npm у свій командний рядок, і все має працювати зараз.


3
-s створює символічне посилання (що часто є кращим вибором), а не жорстке посилання.
гайда

20
Це працює, але відповісти vbo на встановлення nodejs-legacyпакету простіше.
Дон Кіркбі

2
Я другий коментар Дон Кіркбі і відповідь vbo. Я думаю, що відповідь vbo має бути обраною відповіддю.
modulitos

3
Мені здається, набагато зручніше просто створити посилання symbolik, а не встановлювати одне і те ж програмне забезпечення двічі ....
frankies

7
Ні. Не співайся, /usr/binякщо ти не є dpkg. Правильне рішення (якщо вам подобається цей підхід в ручному символі) - створити симпосилання, в/usr/local/bin якій призначено для локальних встановлень та переопределень. Все, що ви робите вручну, /usr/binможе і буде перезаписано менеджером пакунків та / або заплутатиме його.
трійка

44

Ви також можете встановити 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

Повний підручник можна знайти тут


3
Це також для мене виправлена ​​помилка. Це набагато краще для розробника nodejs (на мою думку, цілі розробники, я не той, хто працює в nodejs). Я це використовував.
Ajeeb.KP

1
Мені потрібно було м'яке з'єднання вузла nvm usr/bin/node. Так побігsudo ln -s /home/www/.nvm/v0.10.36/bin/node /usr/bin/node
Джейсон Кім

2
Я працюю над тим, щоб розібратися в цьому годинами. Це єдине рішення, з яким я працював. Дякую.
w3bMak3r

«Вигода» в даний час є мертвою посилання
прогулянка

20
  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

2
Я настійно рекомендую це рішення, щоб отримати контроль над версіями вузла та npm у будь-який час та для будь-якого використання.
Ремі Бехерас

14
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після.


12

для мене проблема була вирішена,

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

10

Ось ще один підхід, який я використовую, оскільки мені подобається 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

Далі додайте вузол, наданий системою (той, який був встановлений з завитком):

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

Тепер виберіть вузол, наданий n за допомогою інтерактивного меню (виберіть /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>.


9

На 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. Після цього я міг встановити пакети в усьому світі.


9

Як вже згадують інші, я пропоную не використовувати "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

6

Просте рішення звідси

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

Ви можете вказати версію, змінивши значення setup_x.x, наприклад на setup_5.x


5

Ваша система не в змозі виявити бінарний вузол шляху js.

1.який вузол

2.Тоді м'який вузол посилання на nodejs

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

Я припускаю, що / usr / bin знаходиться у вашому шляху виконання. Потім ви можете протестувати, ввівши node або npm у свій командний рядок, і все має працювати зараз.


4

Видаліть будь-яку версію вузла у вас

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

встановіть nvm (Node Version Manager) https://github.com/creationix/nvm

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

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


FYI - кожен, хто використовує вищевказаний метод, nvmзауважимо, що пакет застарілих nodejs - v0.10.25. (або, принаймні, це я бачив, коли спробував це.)
JaredH

2

Я виправив від’єднання / usr / sbin / node (який пов'язаний з пакетом ax25-вузла), тоді я створив посилання на nodejs, використовуючи це в командному рядку

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

Оскільки такий пакет, як карма, не працює з ім'ям nodejs, проте змінює перший рядок сценарію карми з вузла на nodejs, але я вважаю за краще вирішити цю проблему раз і назавжди


1

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

Потім свіжа установка як:

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

sudo apt-get autocleanробить "те саме", ніжsudo apt-get install autoclean
m3nda

1

Проблема не в установці
замінити nodejs на вузол або змінити шлях з / usr / bin / nodejs на / usr / bin / node


1

Це ваш вузол неправильно встановлений, спочатку потрібно видалити вузол, а потім встановити знову. Щоб встановити вузол, це може допомогти вам http://array151.com/blog/nodejs-tutorial-and-set-up/

після цього ви можете легко встановити пакети. Щоб встановити пакунки, це може вам допомогти

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


0

ви можете створити ln -s nodejsвузол посилання з /usr/bin надією, що це вирішить вашу проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.