小编典典

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

all

由于与另一个包的名称冲突, Ubuntu 上的NodeJS 解释器名称(node)已重命名为。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 但解释器名称不同?


阅读 115

收藏
2022-03-11

共1个答案

小编典典

TL;博士:

sudo apt-get install nodejs-legacy

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

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

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

  2. nodejs 源包还应在 Priority: extra 提供 nodejs-legacy 二进制包,其中包含 /usr/bin/node
    作为 /usr/bin/nodejs 的符号链接。存档中的任何包都不能依赖或推荐 nodejs-legacy 包,该包仅用于上游
    兼容性。此包声明还应声明与节点包的 Conflicts: 关系。

<…>

第 2 段是 OP 问题的实际解决方案。OP 应该尝试安装此软件包,而不是手动进行符号链接。这是 Debian
软件包索引网站中此软件包的链接。

它可以使用sudo apt-get install nodejs-legacy.

我还没有找到任何关于 NPM 开发人员采用整个东西的信息,但我认为npm包将在某个点上得到修复并nodejs-legacy成为真正的遗产。

2022-03-11