由于与另一个包的名称冲突, Ubuntu 上的NodeJS 解释器名称(node)已重命名为。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;博士:
sudo apt-get install nodejs-legacy
首先让我澄清一下情况。2012 年夏天,Debian 维护人员决定重命名 Node.js 可执行文件,以防止与另一个包发生某种命名空间冲突。对于 Debian 技术委员会来说,这是一个非常艰难的决定,因为它破坏了向后兼容性。
以下是发表在 Debian邮件列表中的委员会决议草案的引述:
nodejs 包应更改为提供 /usr/bin/nodejs,而不是 /usr/bin/node。该软件包应声明与 Debian 中任何引用 /usr/bin/node 的软件包的关系。 nodejs 源包还应在 Priority: extra 提供 nodejs-legacy 二进制包,其中包含 /usr/bin/node 作为 /usr/bin/nodejs 的符号链接。存档中的任何包都不能依赖或推荐 nodejs-legacy 包,该包仅用于上游 兼容性。此包声明还应声明与节点包的 Conflicts: 关系。 <…>
nodejs 包应更改为提供 /usr/bin/nodejs,而不是 /usr/bin/node。该软件包应声明与 Debian 中任何引用 /usr/bin/node 的软件包的关系。
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成为真正的遗产。
nodejs-legacy