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


32

我有两台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

有没有一种方法可以真正解决此问题,所以该节点将安装为/usr/bin/node而不是/usr/bin/nodejs

Answers:


15

在Ubuntu 13.10上,以上所有答案均不适用于我。当我安装nodejs-legacy时,它终于工作了

sudo apt-get install nodejs-legacy

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


知道为什么我们需要安装吗?它实际上是否以某种方式创建了符号链接?为什么节点将其可执行文件的名称更改为nodejs?
奥古斯丁·里丁格

名称“节点”与一个较旧的程序冲突。请参阅lists.debian.org/debian-devel-announce/2012/07/msg00002.html和下面的Leftium答案。
罗比·巴萨克

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

当我无意中安装了non-node.js node软件包时,这发生在我身上。尽管我apt-get remove node在安装正确的nodejs软件包之前就做了,但是我猜想该--purge参数是必需的。

背景资料

节点程序包(业余数据包无线节点程序)存在命名冲突,并且nodejs二进制文件已从node重命名为nodejs。您需要将/ usr / bin / node符号链接到/ usr / bin / nodejs,或者可以卸载Amateur Packet Radio Node Program以避免这种冲突。


感谢您提供背景信息。在这一点上,我没有任何机器可以尝试,但是我希望我能尽快重访。
Hai Vu

/usr/bin/node在Ubuntu 13.10中并没有帮助您。不过,@ user229115的回答如下。
Jim Stewart

1
因此,在Ubuntu 13.10中sudo apt-get install nodejs nodejs-legacynode二进制文件的名称为node.js。但是,如果您已经安装了node(业余分组无线节点程序),则显然需要将其删除。
jonasfj 2014年

1
@AugustinRiedinger:我更新了答案。我认为清除“配置错误”的程序包和安装nodejs-legacy程序包的组合都可以使用。
Leftium

1
谢谢,很清楚。确实,它在安装nodejs-lecacy软件包时有效,实际上可能只是与nodejs可执行文件的符号链接...
Augustin Riedinger 2014年

11

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

alias node="nodejs"

通过输入bash控制台重新启动bash会话,您的别名即可使用。


2
当我创建一个符号链接时,直到启动另一个终端它才起作用。尝试重新启动您的终端...或没有符号链接/别名的有效答案^^
Leftium

@Leftium:您还需要运行:source ~/.bashrc重新加载.bashrc文件(如果你想避免重新启动终端)阅读更多..
迪帕克·乔伊

在新位置进行符号链接几乎肯定需要hash node在您现有的终端中进行调用,因为现代shell会记住以前在PATH中查找过的命令的位置。这些hashshell中的内置命令告诉他们重做查找并记住新位置。
mtraceur


1

答案较晚,但需要最新信息...

如果您使用node github安装自述文件中的荐用方法安装node.js ,则建议按照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选项,以保留代理所需的env var:

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

1

Ubuntu 14.04上,我遇到了相同的节点问题。我没有工作“节点”,也没有工作“ nodejs”。我已经做了

sudo apt-get remove node

在那之后,node正在运行,而nodejs也正在运行:)我是linux的新手,这对我来说是个遗憾。然而鲍尔正在运行!


0
sudo getconf LONG_BIT
sudo uname -p
  • 确认您的CPU架构
  • 在目录树中的https://nodejs.org/dist/中找到您的node.js发行版(注意:用于各种CPU架构的各种node.js发行版的各种版本)

我的桌面当前是Ubuntu 15.10 AMD64,因此在安装示例中将使用以下URL(同样,distrib有所不同):

sudo wget https://nodejs.org/dist/v5.0.0/node-v5.0.0-linux-x64.tar.gz

然后改变目录到您的下载目录:

sudo cd /home/name/Downloads

在下载目录中,执行以下操作:

sudo tar -C /usr/local --strip-components 1 -xzf node-v5.0.0-linux-x64.tar.gz

使用以下命令确认您的node.js安装:

sudo ls -l /usr/local/bin/node
sudo ls -l /usr/local/bin/npm

参考 http://www.hostingadvice.com/how-to/install-nodejs-ubuntu-14-04/


1
-1仅tar命令需要sudo
muru

+1非常感谢您提供更好的方法-对我而言是最好的方法!
1111161171159459134 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.