由于与另一个软件包的名称冲突,nodeUbuntu上的NodeJS解释器名称()已重命名为nodejs。这是自述文件。Debian说:
node
nodejs
Node.js解释器命令的上游名称是“ node”。在Debian中,解释器命令已更改为“ nodejs”。 这样做是为了防止名称空间冲突:其他命令在上游使用相同的名称,例如“ node”包中的ax25-node。 必须将调用Node.js作为shell命令的脚本更改为使用“ nodejs”命令。
Node.js解释器命令的上游名称是“ node”。在Debian中,解释器命令已更改为“ nodejs”。
这样做是为了防止名称空间冲突:其他命令在上游使用相同的名称,例如“ node”包中的ax25-node。
必须将调用Node.js作为shell命令的脚本更改为使用“ nodejs”命令。
但是,使用nodejs会使用来安装软件包npm。软件包安装失败,并出现以下错误:
npm
sh: 1: node: not found npm WARN This failure might be due to the use of legacy binary "node" npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian
sh: 1: node: not found npm WARN This failure might be due to the use of legacy binary "node" npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian
如何使npm理解系统上已经安装了nodejs,但解释器名称不同?
TL; DR:
sudo apt-get install nodejs-legacy
首先,让我澄清一下情况。在2012年夏季,Debian维护者决定重命名Node.js可执行文件,以防止某种名称空间与另一个软件包冲突。对于Debian技术委员会来说,这是非常困难的决定,因为它破坏了向后兼容性。
以下是在Debian 邮件列表中发布的委员会决议草案的引文:
应将nodejs软件包更改为提供/ usr / bin / nodejs,而不是/ usr / bin / node。该软件包应该与Debian中任何引用/ usr / bin / node的软件包声明Breaks:关系。 nodejs源软件包还应提供Priority优先级的nodejs-legacy二进制软件包:Extra包含/ usr / bin / node作为与/ usr / bin / nodejs的符号链接。归档文件中没有任何软件包可以依赖或推荐nodejs- legacy软件包,该软件包仅出于上游 兼容性而提供。该包声明还应声明与该节点包的Conflicts:关系。 <…>
应将nodejs软件包更改为提供/ usr / bin / nodejs,而不是/ usr / bin / node。该软件包应该与Debian中任何引用/ usr / bin / node的软件包声明Breaks:关系。
nodejs源软件包还应提供Priority优先级的nodejs-legacy二进制软件包:Extra包含/ usr / bin / node作为与/ usr / bin / nodejs的符号链接。归档文件中没有任何软件包可以依赖或推荐nodejs- legacy软件包,该软件包仅出于上游 兼容性而提供。该包声明还应声明与该节点包的Conflicts:关系。
<…>
第2段是OP问题的实际解决方案。OP应该尝试安装此软件包,而不要手动进行符号链接。这是Debian软件包索引网站中此软件包的链接。
可以使用安装sudo apt-get install nodejs-legacy。
我还没有找到有关NPM开发人员采用整件事的任何信息,但是我认为npm程序包将在某个时候被固定并nodejs-legacy真正成为遗留物。
nodejs-legacy