一尘不染

无法在Ubuntu中使用节点软件包管理器安装软件包

node.js

由于与另一个软件包的名称冲突,nodeUbuntu上的NodeJS解释器名称()已重命名为nodejs。这是自述文件。Debian说:

Node.js解释器命令的上游名称是“ node”。在Debian中,解释器命令已更改为“ nodejs”。

这样做是为了防止名称空间冲突:其他命令在上游使用相同的名称,例如“ node”包中的ax25-node。

必须将调用Node.js作为shell命令的脚本更改为使用“ nodejs”命令。

但是,使用nodejs会使用来安装软件包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

如何使npm理解系统上已经安装了nodejs,但解释器名称不同?


阅读 237

收藏
2020-07-07

共1个答案

一尘不染

TL; DR:

sudo apt-get install nodejs-legacy

首先,让我澄清一下情况。在2012年夏季,Debian维护者决定重命名Node.js可执行文件,以防止某种名称空间与另一个软件包冲突。对于Debian技术委员会来说,这是非常困难的决定,因为它破坏了向后兼容性。

以下是在Debian 邮件列表中发布的委员会决议草案的引文:

  1. 应将nodejs软件包更改为提供/ usr / bin / nodejs,而不是/ usr / bin /
    node。该软件包应该与Debian中任何引用/ usr / bin / node的软件包声明Breaks:关系。

  2. 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真正成为遗留物。

2020-07-07