Назад | Перейти на главную страницу

Проблема с исполняемым файлом Node.js

Я установил node.js из репозиториев (v0.10.25, Ubuntu 14.04.3, nodejs-legacy пакет).

Мне нужна конкретная версия (v0.10.35) для проекта.

Я установил n (sudo npm install -g n) и установил необходимые node.js версия с его использованием (sudo n 0.10.35).

Вот что происходит:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

$ which node
/usr/local/bin/node

$ node --version
v0.10.25

$ /usr/local/bin/node --version
v0.10.35

Вопросы:

  1. Что здесь происходит? Разве в обоих случаях не должен использоваться один и тот же исполняемый файл с одной и той же версией?

  2. Я могу попробовать удалить node.js устанавливается из репозиториев, но безопасно ли это?

bash кеширует пути к командам:

$ help hash
hash: hash [-lr] [-p pathname] [-dt] [name ...]
    Remember or display program locations.

    Determine and remember the full pathname of each command NAME.  If
    no arguments are given, information about remembered commands is displayed.

    Options:
      -d                forget the remembered location of each NAME
      -l                display in a format that may be reused as input
      -p pathname       use PATHNAME as the full pathname of NAME
      -r                forget all remembered locations
      -t                print the remembered location of each NAME, preceding
                each location with the corresponding NAME if multiple
                NAMEs are given
    Arguments:
      NAME              Each NAME is searched for in $PATH and added to the list
                of remembered commands.

    Exit Status:
    Returns success unless NAME is not found or an invalid option is given.

Итак, проблема заключалась в том, что я впервые запустил node который был найден в /usr/bin. Потом я установил другую версию node в /usr/local/bin которые должны иметь приоритет в соответствии с $PATH, но путь был кэширован bash. Итак, запуск node использовал старый путь, а which node не использовал кеш bash.

Чтобы решить эту проблему, мне нужно было выйти из системы. Или вручную очистить весь кеш:

$ hash -r

у вас установлены 2 разные версии узла и одна в:

   /usr/local/bin/node

тот, который вы только что установили. однако, если вы отметите узел:

/usr/bin or /bin (check with locate or whereis)

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

Этот способ испорченной версии не рекомендуется, если у вас нет опыта.

надеюсь это поможет