Ошибка «Нет такого файла или каталога» при использовании npm

34

Я установил node и npm, используя приведенные здесь инструкции

Я смог успешно использовать узел. Однако, когда я пытаюсь установить модуль узла «Потрясающий», я получаю следующую ошибку:

$npm install formidable
bash: /usr/local/bin/npm: /usr/local/bin/node: bad interpreter: No such file or directory

Когда я делаю, which npmя получаю следующий вывод:

$which npm
/usr/local/bin/npm

Я понятия не имею, что здесь не так с npm - есть идеи, как мне это исправить?

user109187
источник
Добро пожаловать в Спросите Ubuntu! Я вижу, что вы установили Node в /usr/local/bin/. Пакеты, которые вы использовали в инструкциях, на которые вы ссылались, не делают этого. Я думаю, что вы также установили другой Node из источника. Пожалуйста, расскажите всю историю.
gertvdijk
@gertvdijk Ну, изначально был установлен узел 0.8.14. Я хотел обновить это до 0.8.18. Я тогда побежал, $sudo apt-get remove --purge nodejs npmно это не сработало. node --versionпосле установки 0.8.18 все равно показывал 0.8.14. Итак, то, что я сделал, это следовал за сообщением, которое я не могу найти сейчас - оно в основном проинструктировано, which nodeа затем rm -r /usr/local/bin/...- в основном, некоторые связанные с узлами файлы в этом каталоге. Теперь, после этого, я переустановил узел, и это была обновленная версия. Работает нормально, но npm - нет.
user109187
Да, это то, что происходит при установке из исходного кода. Это запутает ваше управление пакетами и вас как пользователя. Пожалуйста, устанавливайте программное обеспечение только как пакеты, если вы не знаете, что делаете. Используйте инструкции по удалению со сценариями, которые вы использовали для установки этой более ранней версии, чтобы правильно удалить ее. И, пожалуйста, отредактируйте свой вопрос, чтобы предоставить дополнительную информацию. Понимаете, это сайт вопросов и ответов, а не дискуссионный форум? :)
gertvdijk
@gertvdijk Я нашел пост, в котором указывалось вручную удалять файлы - stackoverflow.com/a/5917184/1907800 . Путь здесь / usr / bin / node
user109187

Ответы:

51

Используя подсказку @gertvdijk, я удалил NPM, используя скрипт:

rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm*

(который можно найти здесь )

Даже после выполнения вышесказанного я получил еще одну ошибку:

$ npm install formidable  
bash: /usr/local/bin/npm: No such file or directory

Итак, я запустился hash -rв терминале (согласно инструкциям, приведенным в разделе « NPM не запускается после обновления» ) и вуаля - все заработало. NPM теперь работает!

user109187
источник
1
единственной полезной вещью здесь было обнаружение hash, которое можно просто использовать для указания на другой узел / npm (что, если я хочу работать с более чем одной версией узла?)
user309383
Прекрасный гость пользователя.
LM_Fielding
4
hash -r спас меня
diogo.abdalla
что hashделает !?
Чанджунг Ким
11

Ubuntu и некоторые дистрибутивы Linux устанавливают интерпретатор узла как /usr/bin/nodejs, а не как /usr/local/bin/node.

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

Решение:

sudo apt-get install nodejs-legacy

Ссылки: пакет nodejs-legacy

Pac
источник
1
Кажется, nodejs-legacyбольше не существует.
Мартин де ла Фуэнте
2

Похоже, что вы установили другую версию Node из исходного кода ранее. На это указывает /usr/local/binпуть, по которому он сейчас установлен.

  1. Удалите тот, который вы установили из источника. Смотрите инструкции, которые есть с источником, как это сделать. Не существует единого способа удалить установленные программные сценарии, которые не работают с управлением пакетами вашей системы.
  2. Установленные пакеты перечислены в инструкциях, которые вы указали в своем вопросе.
  3. Убедитесь, что which npmтеперь указывается в /usr/binкачестве пути установки.

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

gertvdijk
источник