node.js 冲突:/sbin/node vs /usr/bin/node

Hai*_* Vu 34 apt nodejs

我有两台 Ubuntu 12.10 机器:机器 A 是 VMWare VM,机器 B 是旧的 Acer 笔记本电脑。在两台机器上,我都使用 apt-get 安装了节点。但是,机器 A 将主二进制文件安装为/usr/bin/node,机器 B 安装为/usr/bin/nodejs. 以下是我观察到的一些行为:

  1. 两台机器/usr/bin/node都响应which node命令返回。但是,机器 B 上没有这样的文件。
  2. 发出命令node适用于机器 A,而不是 B。在 B 上,我必须nodejs改用。
  3. 在 B 上,有一个名为 /sbin/node 的二进制文件,A 没有它。

在两台机器上开发时,这些行为会导致不一致问题。现在,我通过重命名 B 上的二进制文件来解决这个问题:

sudo mv /sbin/node /sbin/node-sbin
sudo ln -s /usr/bin/nodejs /usr/bin/node
Run Code Online (Sandbox Code Playgroud)

有没有办法真正解决这个问题,以便该节点将安装为/usr/bin/node而不是/usr/bin/nodejs

Lef*_*ium 36

更新:修改了下面的说明以使用该nodejs-legacy包。(有关 node-legacy 的更多信息

尝试完全删除冲突的节点包:

sudo apt-get --purge remove node
sudo apt-get --purge remove nodejs-legacy
sudo apt-get --purge remove nodejs

sudo apt-get install nodejs-legacy

# Confirm it worked
node --version       # v0.10.13
ls -la `which node`  # ... /usr/bin/node -> /etc/alternatives/node
Run Code Online (Sandbox Code Playgroud)

当我无意中安装了非 node.jsnode包时,这发生在我身上。虽然我apt-get remove node在安装正确的nodejs包之前就做了,但我猜这个--purge参数是必需的。

背景资料

与节点包(Amateur Packet Radio Node Program)存在命名冲突,nodejs二进制已经从node重命名为nodejs。您需要将 /usr/bin/node 符号链接到 /usr/bin/nodejs 或者您可以卸载 Amateur Packet Radio Node Program 以避免这种冲突。


小智 16

在 Ubuntu 13.10 上,上述所有答案对我都不起作用。当我安装 nodejs-legacy 时,它终于奏效了

sudo apt-get install nodejs-legacy
Run Code Online (Sandbox Code Playgroud)

这正确地/usr/bin/node为我提供,以便nodemon可以使用例如。


Aus*_*ust 12

对我来说不幸的是,创建符号链接不起作用。对我有用的是创建别名。在~/.bashrc~/.bash_aliases(如果~/.bashrc加载此文件)中,只需添加以下行:

alias node="nodejs"
Run Code Online (Sandbox Code Playgroud)

通过bash在控制台中键入来重新启动 bash 会话,您的别名现在将起作用。

  • 当我创建一个符号链接时,它在我启动另一个终端之前不起作用。尝试重新启动您的终端...或者我的答案在没有符号链接/别名的情况下有效^^ (2认同)

小智 7

我觉得这就是:

须藤更新替代品 --install /usr/bin/node 节点 /usr/bin/nodejs 10

使用 Debian 替代品。