2013-02-16 48 views

回答

106

Ubuntu中有两个包含类似名称的包,节点nodejs

node做到这一点,

说明恩:业余分组无线节点计划。节点程序接受TCP/IP和分组无线网络连接,并为用户提供一个接口,允许他们使用各种业余无线协议与远程主机建立网关连接。

nodejs做到这一点,

说明恩:Node.js的基于事件的服务器端JavaScript引擎的Node.js在设计上相似,由像Ruby的事件机器或Python的扭曲影响系统。它使事件模型更进一步 - 它将事件循环呈现为语言结构而不是库。 Node.js捆绑了几个有用的库来处理服务器任务:系统,事件,标准I/O,模块,定时器,子进程,POSIX,HTTP,多部分解析,TCP,DNS,断言,路径,URL,查询字符串。

Fedora也遵循类似的包命名方案。因此,nodejs中的二进制必须从原来的node重命名为nodejs。然而,这在技术上并非犹太人:大多数nodejs程序(和npm安装的库)假定节点二进制文件是node。如果你想解决这个问题,最简单的方法就是将两者联系在一起。如果你采取这种路线,不要安装node包处理业余包无线电的东西。

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

另外,在节点的情况下,我建议使用n,而不是安装node。只需安装npm(将安装节点),然后删除npm,然后告诉apt来清理它。要做到这一点,只需运行

sudo apt-get install npm 
sudo npm install -g n 
sudo n latest 
sudo apt-get --purge remove npm 
sudo apt-get autoremove 

还有其他二进制发行版的经理,即使是从一个shell脚本的工作就像nvm,但我个人更喜欢n。想像n就像一个适合的东西:它安装到/usr/local/bin的节点二进制文件。

为什么要删除npm?不是。 apt-get --purge remove只能只有永远删除包管理器安装的东西。 n latest在包管理器之外工作。有两个npms,如果你这样做,

  1. 版本安装的发行版(Debian/Ubuntu)使用apt-get
  2. 版本安装n latest

发行版的旧版本没有意义。更糟糕的是,如果该版本能够工作,它可能会安装到不同的位置,并在其中进行Debian修改,使Debian安装目录。最好使用/或而不是两者。

+2

很好的解释。这是我遇到过的最愚蠢的错误之一......是不是包维护者应该确保这样的东西不会发生? – 2013-03-26 18:14:04

+2

不,你只能用一个名为'node'的二进制文件和任何合理的软件包管理器,但是合理的发行版会意识到由于最后一个软件包最后一次修复的软件包给许多人造成了不便,所以没有任何意义。这是git与git-core的重复。 – 2013-03-26 18:23:01

+3

我对此有点困惑,为什么最后删除npm?它还不是需要吗? – 2016-02-01 22:18:23

4

对我而言,这是因为在我的PATH环境变量中,我有“〜/ progs/node/bin /”,并且“〜”似乎没有通过env来解决......用真正的满路径(“/ home/myuser/node/bin”)解决了我的问题。

+0

太棒了!你是怎么找到的? – 2013-12-18 04:22:20

+1

通过尝试各种不同的疯狂的东西...... :) – 2013-12-18 08:36:37

21

您应该安装具有从/ usr/bin中/节点到/ usr/bin中的链接的NodeJS遗留包/的NodeJS

$ sudo apt-get install nodejs-legacy

0

在cmd中

sudo apt-get install nodejs-legacy 
chmod your folder 700 (optional) 
1

这做解决方案

export PATH="$HOME/opt/nodejs/bin:$PATH" 

为我解决了这个问题(它应该工作假设$ HOME变量设置正确)。它还允许我避免硬编码通往我的主目录的路径(例如,如果需要,我可以在不同的帐户/服务器上重用我的.bash_profile)

相关问题