ubuntu 12.04上的nodejs vs node

Jat*_*tin 359 javascript ubuntu serverside-javascript node.js

我在这里给出的指令上安装了ubuntu上的nodejs

当我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命令工作.

ran*_*nel 594

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

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

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

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

稍后编辑

我在你发布的链接中找到了这个解释

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

稍后编辑

我回答这个问题已经有一段时间了.虽然我在这里发布的解决方案多次为我工作,但用户在评论中报告了更多解决方案:

来自@ 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
Run Code Online (Sandbox Code Playgroud)

  • 另外,如何卸载业余分组无线电节点程序?我试过“sudo apt-get remove node”,但它说“Package node is not installed, so not removed” (2认同)
  • @Tino的[答案](http://stackoverflow.com/a/20929278/1424087)是正确的,请参阅`nodejs-legacy`包的说明.由@BennyMcBenBen链接的答案也已经更新了类似的说明. (2认同)

小智 87

我觉得这就是:

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

使用Debian替代品.

  • 命令中的数字"10"是什么意思? (7认同)
  • 这似乎是比接受的答案更好的选择,它不会手动更改/ usr/bin /文件夹,并使用基础结构来替代命令 (3认同)
  • 你能更具体地了解这是做什么的吗? (3认同)
  • 我必须'source~/.bashrc`才能生效 (2认同)

Tin*_*ino 63

显然,Ubuntu版本之间的解决方案不同.以下为Ubuntu 13.10工作:

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

HTH

编辑:经验法则:

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

根据我的测试,Ubuntu 17.10及更高版本/usr/bin/nodenodejs安装后已经具备了兼容性软链接,因此nodejs-legacy不再需要这些版本.

  • `nodejs-legacy`不需要太多维护.它只是添加一个类似于`sudo ln -s nodejs/usr/bin/node`的软链接,至少在LTS 14.04上 (8认同)
  • 在Ubuntu 14.04上,nodejs和nodejs-legacy安装相同版本的Node(0.10.25).+1到@Tino. (4认同)

Dmy*_*vid 30

我在Ubuntu 14.04中遇到了同样的问题.

我已经安装了"nodejs"并且它正在工作,但前提是我使用命令"nodejs".如果我尝试使用"节点"没有任何反应.

我用下一个方法解决了这个问题:

  1. 安装nodejs-legacy

    sudo apt-get install nodejs-legacy

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

  1. 第二,我做了什么,它是"nodejs"的象征性链接:

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

  • 你的系统有些奇怪的东西.`node`应该被安装到`/ usr/bin /`而不是`/ usr/sbin /`.它看起来好像你之前已经从hamradio安装了Ubuntu`quode`包(请参阅http://packages.ubuntu.com/trusty/all/node/filelist)并忘记在shell级别运行`hash -r` ,这样shell仍然记得错误的路径.第二个`ln`也固定了,但是在离开那个shell之后不再需要了. (4认同)

CHs*_*fer 11

这也发生在我身上.

node -v => 0.10.2
nodejs -v => 5.5.0
Run Code Online (Sandbox Code Playgroud)

问题是我前一段时间从源代码安装了节点.运行

which node
Run Code Online (Sandbox Code Playgroud)

总是指向这个本地安装.也,

echo NODE_PATH
Run Code Online (Sandbox Code Playgroud)

指向本地安装.

删除源安装目录没有帮助.它刚刚打破了node命令.最后,取消设置NODE_PATH环境变量并清除然后重新安装nodejs就可以了.

unset NODE_PATH
sudo apt-get --purge remove nodejs
sudo apt-get install nodejs
Run Code Online (Sandbox Code Playgroud)

在这之后,

node -v => 5.5.0
Run Code Online (Sandbox Code Playgroud)

和npm install开始工作,取决于Node => 5.0.


Phi*_*ill 10

我是这一切的新手,但对我来说,一个简单的别名有效:

alias node='env NODE_NO_READLINE=1 rlwrap nodejs'
Run Code Online (Sandbox Code Playgroud)

至少在bash中直接运行并执行.js文件.


Rot*_*eti 10

节点版本管理器(nvm)

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

这很简单:

安装nodejs版本:

$ nvm install 4.4
Run Code Online (Sandbox Code Playgroud)

现在除了已安装的版本之外,还有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
Run Code Online (Sandbox Code Playgroud)

您可以安装更多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)
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我的问题,非常感谢,我在[如何在Ubuntu 14.04服务器上安装Node.js]上为`nvm`找到了一些有用的命令(https://www.digitalocean.com/community/tutorials/how-to -install节点-JS-AN-Ubuntu的14-04-服务器上) (2认同)

cch*_*ain 9

如何使用nodejs站点的官方说明:

对于v7:

curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)

对于v6:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
sudo apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)

对于v4:

curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)

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

如果您计划安装需要构建的本机npm模块,还要运行:

sudo apt install -y build-essential
Run Code Online (Sandbox Code Playgroud)

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


小智 7

添加到@ randunel的正确答案(尚未对SO发表评论):

我还必须将/ usr/local/bin/node符号链接到/ usr/bin/nodejs.

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

显然,这会覆盖/ usr/bin/node命令.

不知道如何设定,但希望它可以帮助别人,因为弄清楚为什么以上不适合我是一种痛苦.


Err*_*sen 7

迟到的答案,但对于最新的信息......

如果你使用来自节点github安装自述文件的recommended方法安装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
Run Code Online (Sandbox Code Playgroud)

请注意,这适用于v0.12,在不久的将来可能会过时.

此外,如果您在公司代理(例如我)后面,您将需要在sudo命令中添加-E选项,以保留代理所需的env变量:

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


Bur*_*lar 5

这对我有用:

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

按照链接中的说明操作后.