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

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

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

  1. 两台机器都/usr/bin/nodewhich 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

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

答案1

更新:修改了以下使用该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

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

背景信息

与 node 包(业余分组无线电节点程序)存在命名冲突,nodejs 二进制文件已从 node 重命名为 nodejs。您需要将 /usr/bin/node 符号链接到 /usr/bin/nodejs,或者您可以卸载业余分组无线电节点程序以避免该冲突。

答案2

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

sudo apt-get install nodejs-legacy

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

答案3

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

alias node="nodejs"

bash通过在控制台中输入内容重新启动 bash 会话,您的别名现在就可以起作用了。

答案4

回答晚了,但信息是最新的......

如果你使用推荐的方法安装 node.jsnode github 安装自述文件,建议按照nodesource 博客文章,而不是从过时的 apt-get repo 安装,node.js 应该使用命令node以及命令运行nodejs,而不必创建新的符号链接。

本文中的方法是:

# Note the new setup script name for Node.js v0.12
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -

# Then install with:
sudo apt-get install -y nodejs

请注意,这是针对 v0.12 的,在不久的将来它可能会过时。

此外,如果您使用公司代理(像我一样),则需要在 sudo 命令中添加 -E 选项,以保留代理所需的环境变量:

curl -sL https://deb.nodesource.com/setup_0.12 | sudo -E bash -

相关内容