Я установил 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
Вопросы:
Что здесь происходит? Разве в обоих случаях не должен использоваться один и тот же исполняемый файл с одной и той же версией?
Я могу попробовать удалить 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)
Затем вы увидите, где он связан, все, что вам нужно, это изменить путь символической ссылки на желаемую версию узла.
Этот способ испорченной версии не рекомендуется, если у вас нет опыта.
надеюсь это поможет