Express.js: Нет такого файла или каталога

47

Я установил node с apt-get install nodejs. Затем я установил npm с помощью apt-get install npm. Теперь, когда я пытаюсь запустить express, я получаю

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

Как устранить эту ошибку?

Теги:
fedora

5 ответов

107
Лучший ответ

В Ubuntu есть два пакета с похожими именами, node и nodejs.

node делает это,

Описание-ru: программа любительского пакетного радио node. Программа node принимает соединения TCP/IP и пакетной радиосети и предоставляет пользователям интерфейс, который позволяет им устанавливать шлюзовые соединения с удаленными узлами с использованием различных радиолюбительских протоколов.

nodejs делает это,

Описание-ru: Node.js javascript engine на стороне сервера Node.js похож по дизайну и зависит от таких систем, как Ruby Event Machine или Python Twisted. Он принимает модель события немного дальше - он представляет цикл событий как конструкцию языка, а не как библиотеку. Node.js поставляется с несколькими полезными библиотеками для работы с серверными задачами: System, Events, Standard I/O, Modules, Timers, Child Processes, POSIX, HTTP, Multipart Parsing, TCP, DNS, Assert, Path, URL, Query Строки.

Fedora также следует аналогичной схеме именования пакетов. Из-за этого двоичный код в nodejs должен был быть переименован в nodejs из оригинала node. Однако это не технически кошерно: и большинство программ nodejs (и библиотек, установленных с npm) предполагают, что двоичный node - node. Если вы хотите обойти это, самым простым способом является просто символическое сочетание двух. Если вы берете этот маршрут, не устанавливайте пакет node, который обрабатывает материал любительского пакета радио.

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

В качестве альтернативы, в случае node, я бы предложил использовать n и не устанавливать node. Просто установите npm (который установит node), затем удалите npm, а затем скажите apt очистить его. Для этого просто запустите

sudo apt-get install npm
sudo npm install -g n
sudo n latest
sudo apt-get --purge remove npm
sudo apt-get autoremove

Существуют и другие двоичные дистрибутивные менеджеры, которые даже работают из оболочки script как nvm, но я лично предпочитаю n. Подумайте о n как о подходе только к одному: двоичному файлу node, который он устанавливает в /usr/local/bin.

Почему удаление npm? Не были. apt-get --purge remove может удалять только те вещи, которые установлены диспетчером пакетов. n latest работает за пределами диспетчера пакетов. Если вы сделаете это, будет два npms,

  • установленный дистрибутивом (Debian/Ubuntu) с помощью apt-get.
  • версия установлена ​​ n latest.

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

  • 2
    хорошее объяснение. это одна из самых глупых ошибок, с которыми я когда-либо сталкивался ... разве разработчики пакетов не должны гарантировать, что подобные вещи не произойдут?
  • 2
    Нет, у вас может быть только один двоичный файл с именем node с любым подходящим менеджером пакетов, однако разумный дистрибутив поймет, что неудобство для многих людей из-за пакета, последний раз исправленного десять лет назад, не имеет смысла. Это повторение мерзавца против мерзавца.
Показать ещё 3 комментария
20

вы должны установить пакет nodejs-legacy, у которого есть ссылка из /usr/bin/ node в/usr/bin/nodejs

$ sudo apt-get install nodejs-legacy

4

В моем случае это было потому, что в моей переменной среды PATH у меня было "~/progs/node/bin/", а "~", похоже, не разрешено с помощью env... заменяя он с полным полным путем ( "/home/myuser/node/bin" ) решил мою проблему.

  • 0
    Большой! Как ты это нашел?
  • 1
    Пробуя всевозможные сумасшедшие вещи ... :)
1

Это решение

export PATH="$HOME/opt/nodejs/bin:$PATH"

разрешил эту проблему для меня (она должна работать, если задана переменная $HOME). Это также позволяет мне избегать жесткого кодирования пути к моему домашнему каталогу (например, чтобы я мог повторно использовать мой .bash_profile с разными учетными записями/серверами, если мне нужно)

0

сделайте это в cmd

sudo apt-get install nodejs-legacy
chmod your folder 700 (optional)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню