Узел навсегда / usr / bin / env: node: нет такого файла или каталога

108

Я установил nodejs, используя:

apt-get install nodejs

Затем я установил npm, используя:

apt-get install npm

И затем я установил навсегда, используя:

npm install forever -g

Теперь я захожу в свой проект /var/www/myproject

и попытаться бежать forever start server.js

тогда я получаю следующее сообщение:

/usr/bin/env: node: No such file or directory

Кто-нибудь может сказать мне, что происходит?

Марк Расмуссен
источник
1
Я получаю эту ошибку и использую диспетчер версий узлов.
munchschair

Ответы:

270

РЕДАКТИРОВАТЬ: По состоянию на декабрь 2018 года это больше не правильный способ. См. Два других ответа.

Вам необходимо связать исполняемый файл nodejs с узлом sudo ln -s "$(which nodejs)" /usr/local/bin/node. Причина в том, что когда вы выполняете «apt-get install node», он устанавливает несвязанный пакет, поэтому им пришлось выбрать другое имя, чтобы оно не конфликтовало.

чедабоб
источник
4
что такое $ (which nodejs) "- это код, в который вы вставляете то, что я должен просто скопировать или вставить?
Марк Расмуссен,
11
"$ (which nodejs)" получает путь к исполняемому файлу nodejs. Когда вы помещаете что-то внутри "$ ()", оно запускается и затем вставляется в содержащую команду
chedabob
2
@chedabob Я столкнулся с той же проблемой, но я еще не решил ее, когда я запускаю вашу команду в то время, я получил ln: не удалось создать символическую ссылку '/ usr / bin / node': Файл существует
DASADIYA CHAITANYA
@ dasadiya-chaitanya В этом случае убедитесь, что существующий файл указывает на правильный исполняемый файл узла, выполнив следующее. ls -lart / usr / bin / узел. Если символическая ссылка не указывает на правильный двоичный файл, в этом случае удалите ее. И повторно запустите следующее: sudo ln -s "$ (which nodejs)" / usr / bin / node
brownmamba
4
В Debian и Ubuntu есть пакет, nodejs-legacyпредоставляющий символическую ссылку. Вы не должны делать это вручную. apt-get install nodejs-legacy- правильный способ решить проблему, см. мой ответ ниже.
Clément Schreiner
45

Хотя принятый ответ устраняет проблему, правильный способ сделать это, по крайней мере, с Debian Jessie и вперед и Ubuntu 14.4 и вперед 1, - это установить nodejs-legacy :

apt-get install nodejs-legacy

Причина в том, что в Debian уже был пакет (узел), обеспечивающий / usr / bin / node , а двоичный файл nodejs node должен был быть установлен в / usr / bin / nodejs.

Пакет nodejs-legacy предоставляет символическую ссылку из / usr / bin / nodejs в / usr / bin / node (и конфликтует с пакетом node ).

Источник: [CTTE # 614907] Разрешение конфликта node / nodejs и ошибки Debian № 614907: node: имя конфликтует с интерпретатором node.js

Клеман Шрайнер
источник
Это правильный способ для Debian / Ubuntu +1, отличный контекст для тех, кто не знаком с ОС.
Ligemer
это полностью сломало npm SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode, даже удаление устаревшего и переустановка npm вызывает ту же ошибку.
Tcll
продолжая мой последний комментарий, этот ответ исправил то, что сломал текущий ответ, и я смог продолжить ответ, предоставленный @Shantanu
Tcll
19

Лучше, если вы обновитесь до последней версии ноды

  1. sudo npm cache clean -f
  2. sudo npm install -gn
  3. sudo n стабильный
Шантану
источник