node.js
我已经从存储库安装( v0.10.25
Ubuntu 14.04.3nodejs-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
从存储库中卸载已安装的软件,但是这安全吗?
答案1
您安装了两个不同版本的节点,其中一个位于:
/usr/local/bin/node
是您刚刚安装的。但是,如果您签入节点:
/usr/bin or /bin (check with locate or whereis)
然后您将看到它链接到哪里,您只需要将符号链接路径更改为所需的节点版本。
如果您没有经验,不建议使用这种混乱的版本。
希望这可以帮助
答案2
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