Ubuntu 12.04上的nodejs vs节点


363

我从这里给出的说明在Ubuntu上安装了Node.js

当我node --version在终端上写时,我看到了:
-bash: /usr/sbin/node: No such file or directory

我可以在/usr/sbin/目录中看到节点。

npm --version节目1.3.5
nodejs --version节目v0.10.15

另外,我可以在/usr/bin/目录中看到节点。

那么,我该如何node工作?

另外,如果我使用zsh而不是bash,则node命令有效。


1
如果“您在/ usr / bin /中看到节点”,那么输出是ls -l /usr/bin/node什么?
randunel

1
@randunel我得到了这个输出lrwxrwxrwx 1 root root 22 Jan 1 2013 /usr/bin/node -> /etc/alternatives/node
Jatin

您是否对shell rc进行了任何更改?
randunel

编辑后,这看起来像是外壳问题,export | grep PATH不使用时输出什么zsh?(应该打印/usr/bin出其他内容)
randunel

1
解决方案+此处的说明:stackoverflow.com/questions/21168141/…–
throbi

Answers:


599

您需要手动创建一个符号链接/usr/bin/node。bash兼容shell的快捷方式:

sudo ln -s `which nodejs` /usr/bin/node

或者,如果您使用非标准的shell,只需使用以下命令对找到的路径进行硬编码which nodejs

sudo ln -s /usr/bin/nodejs /usr/bin/node

以后编辑

我在您发布的链接中找到了这种解释

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

以后再编辑

自从我回答这个问题已经有一段时间了。尽管我在这里发布的解决方案对我有用,但用户在评论中报告了更多解决方案:

来自@ user229115

sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10

从AskUbuntu(用户leftium)

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

好的!虽然,如果使用zsh,则该node命令有效。
加丁

1
另外,如何卸载业余分组无线节点程序?我尝试过sudo apt-get remove node但是它说Package node is not installed, so not removed
Jatin

在注释之后,您不需要卸载它,这看起来像是一个外壳问题,而不是节点软件包问题。
randunel

@randunel的答案对我不起作用,因为对我/usr/bin/env node不起作用。@BennyMcBenBen的解决方案确实奏效了
francoisrv

2
@Tino的答案是正确的,请参阅nodejs-legacy软件包的说明。@BennyMcBenBen链接的答案也已使用类似的说明进行了更新。
tricasse 2015年

88

我觉得这就是:

sudo update-alternatives --install / usr / bin / node节点/ usr / bin / nodejs 10

使用Debian替代品。


3
这似乎是比接受的答案更好的选择,因为它不会手动更改/ usr / bin /文件夹,并且正在使用基础结构来替代命令
Dominik Fretz,2014年

还没有尝试过,但是我看了看update-alternative文档。如果确实有效,那么这是一个更好的解决方案:)
randunel 2014年

3
您能更具体地说明这是什么吗?
bcorso 2014年

@DominikFretz嗯。使用Debian特定命令与POSIX兼容命令的最终结果完全相同。(您本可以做的update-alternatives --install /usr/local/bin/fribjazt node /usr/bin/nodejs 10。)对每个人来说,但我更喜欢平原ln
kojiro '16

2
我必须source ~/.bashrc对此生效
-iNulty

64

显然,解决方案在Ubuntu版本之间有所不同。以下在Ubuntu 13.10上为我工作:

sudo apt-get install nodejs-legacy

高温超导

编辑:经验法则:

如果已安装nodejs但缺少/usr/bin/node二进制文件,则也要安装nodejs-legacy 这只会创建丢失的软链接。

根据我的测试,安装/usr/bin/node后,Ubuntu 17.10及更高版本已经具有兼容性软链接nodejs,因此nodejs-legacy这些发行版中均已缺少它们,因为不再需要它。


似乎不再维护nodejs-legacy。最新版本将于2013-04-10停止
francoisrv 2014年

8
nodejs-legacy不需要太多维护。它只是添加了类似于sudo ln -s nodejs /usr/bin/node,至少在LTS 14.04上的软链接
Tino

4
在Ubuntu 14.04上,nodejs和nodejs-legacy安装相同版本的Node(0.10.25)。+1到@Tino。
Mark E. Haase 2014年

在Debian Jessie中也为我工作。这应该是公认的答案,因为这就是事物的本意。只有使用业余无线电软件包的人才可以这样做。我想知道为什么他们没有像对铬bsu那样重命名无线电程序包。
杰罗姆

这将导致您的系统上有2个node实例,并且不再维护...建议您链接到nodejs。
PodTech.io

30

我在Ubuntu 14.04中有相同的问题。

我已经安装了“ nodejs”,并且可以使用,但是仅当我使用命令“ nodejs”时才可以。如果我尝试使用“节点”,则什么也不会发生。

我用以下方式解决了这个问题:

  1. 安装nodejs-legacy

    须藤apt-get install nodejs-legacy

之后,当我在命令行中键入“ node”时,我收到一条错误消息“ / usr / sbin / node:没有这样的文件或目录”

  1. 其次,我做了什么,它是“ nodejs”上的符号链接:

    须藤ln -s / usr / bin / nodejs / usr / sbin / node

4
您的系统上有些奇怪。 node应该安装在/usr/bin/而不是/usr/sbin/。它看起来像是您之前node从hamradio 安装了Ubuntu 软件包(请参阅packages.ubuntu.com/trusty/all/node/filelist)并忘记hash -r在shell级别运行,因此shell仍然记得错误的路径。第二个也ln修复了该问题,但是在离开该shell之后不再需要它。
蒂诺2014年

顺便说一句,甚至错误的答案是好解释所有的麻烦,由于三个包都非常相似的名称:node/usr/sbin/node完全不同的东西), (nodejs/usr/bin/nodejsnodejs-legacy/usr/bin/node取决于封装nodejs)。
蒂诺2014年

这也发生在我身上。我前一段时间已经从源代码安装了node。 node -v => 0.10.2一会儿nodejs -v => 5.5.0。运行命令which node始终指向此本地安装。最后,我必须指向unset NODE_PATH,以指出要对其进行修复的本地安装。此后,node -v => 5.5.0npm install 开始根据Node => 5.0来处理软件包。
CHsurfer '16

11

这也发生在我身上。

node -v => 0.10.2
nodejs -v => 5.5.0

问题是我前一段时间已经从源代码安装了节点。跑步

which node

始终指向此本地安装。也,

echo NODE_PATH

指向本地安装。

使用源安装删除目录并没有帮助。它只是破坏了节点命令。最后,取消设置NODE_PATH环境变量,然后清除然后重新安装nodejs可以解决问题。

unset NODE_PATH
sudo apt-get --purge remove nodejs
sudo apt-get install nodejs

在这之后,

node -v => 5.5.0

和npm install开始对取决于Node => 5.0的软件包起作用。


这对我有用。太糟糕了,我找了一个小时弄乱了才找到它。
达斯汀·弗雷克

11

节点版本管理器(nvm)

如果您想安装多个nodejs版本并在它们之间轻松切换,我建议使用Node Version Manger。它还解决了命名问题(nodevs nodejs

很简单:

安装一个nodejs版本:

$ nvm install 4.4

现在,除了已经安装的版本之外,您还拥有nodejs 4.4,您可以使用node命令来获得新安装的版本:

$ node -v    // The new version added by nvm.
v4.4.5
$ nodejs -v  // The OS version is untouched and still available.
v0.10.25

您可以安装更多的nodejs版本,并在它们之间轻松切换:

$ nvm install 6.2
$ nvm use 6.2
Now using node v6.2.1 (npm v3.9.3)
$ node -v
v6.2.1
$ nvm use 4.4
Now using node v4.4.5 (npm v2.15.5)

2
这就解决了我的问题,非常感谢,我找到了一些nvm有关如何在Ubuntu 14.04服务器上安装Node.js的
Huy Nguyen

1
这对我有用。也可以在这里指南:digitalocean.com/community/tutorials/...
公园科内利斯

10

我不熟悉这一切,但对我来说,一个简单的别名有效:

alias node='env NODE_NO_READLINE=1 rlwrap nodejs'

至少用于直接在bash中运行事物并执行.js文件。


没有工作rlwrap。谢谢!
Shurik

谢谢@Phill,您太棒了!
尤斯里尔

9

如何使用来自nodejs网站的官方说明

对于v7:

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs

对于v6:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs

对于v4:

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs

我已经从Windows bash(通过Linux-14.04子系统)和raspbian(基于ARM Debian)对它们进行了测试。在sudo apt-get install -y nodejs没有先运行安装脚本的情况下运行将导致您获得节点0.10。

如果您打算安装需要构建的本机npm模块,请运行:

sudo apt install -y build-essential

注意:这是所有体系结构中任何基于Debian的发行版的推荐路径。


7

添加到@randunel的正确答案(尚无法对此发表评论):

我还必须将/ usr / local / bin / node链接到/ usr / bin / nodejs。

sudo ln -s /usr/bin/nodejs /usr/local/bin/node

显然,这是覆盖/ usr / bin / node命令。

不知道如何设置,但希望它能对其他人有所帮助,因为弄清楚为什么上述方法对我不起作用是很痛苦的。


7

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

如果您使用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 -



4

如果您在运行Ubuntu实例的AWS EC2实例上(在Ubuntu 16.x上进行了测试),那么以下步骤可能对您有用:

    sudo apt-get更新
    sudo apt-get --purge删除节点-y
    sudo apt-get --purge删除nodejs -y
    sudo apt-get --purge删除legacy-node -y
    须藤rm / usr / bin / node
    curl -sL https://deb.nodesource.com/setup_6.x | 须藤bash-
    须藤apt-get install nodejs -y
    节点-v

如果一切正确,则最后一条命令的输出应为:v6.xx

如果没有,请运行以下命令:

    须藤ln -s / usr / bin / nodejs / usr / bin / node

希望这会有所帮助。它神奇地帮助了我(呵呵)。


3

我遇到了同样的问题,符号链接帮助了我:sudo ln -s / usr / bin / nodejs / usr / bin / node之后sudo npm install -g phantomjs-prebuilt

顺利进行


2

最好的安装nodejs的方法是通过NVM(节点版本管理器)

删除以前的版本:

$ sudo apt-get清除节点
$ sudo apt自动删除

还删除$ sudo rm -rf node_modules包含该文件夹的目录中的所有node_modules 。

Node和Nodejs在技术上是同一回事。只是名称改变了。

首先安装或更新nvm

以root身份运行

$ sudo su 

然后

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.7/install.sh | 重击

要么

$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.7/install.sh | 重击

检查NVM到路径

$ source〜/ .profile
$ nvm ls-remote

如果您收到有关列表的错误,请安装git。

$ sudo apt-get安装git

重新运行:

$ nvm ls-remote
要么
$ sudo nvm ls-remote

$ nvm安装版本,您需要 

检查版本

#节点-版本
nvm使用您需要的版本

信息来源:

https://www.digitalocean.com/community/tutorials/how-to-install-node-js-with-nvm-node-version-manager-on-a-vps



1

对绝对的初学者会有所帮助

虽然,您已经找到答案,只是想指出该node命令(不带任何参数)将以REPL read-eval-print-loop模式启动节点以执行原始javascript代码。

使用node命令的另一种方法是通过提供js文件作为参数。这就是我们主要使用它的方式。


0

删除现有的节点和nodejs是可选的,但是必须另选安装最新的7.x nodejs。

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs



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.