Node.js 可执行文件问题

Node.js 可执行文件问题

node.js我已经从存储库安装( v0.10.25Ubuntu 14.04.3nodejs-legacy包)。

v0.10.35我需要一个用于项目的特定版本( )。

我安装了nsudo 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从存储库中卸载已安装的软件,但是这安全吗?

答案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

相关内容