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

新手上路,请多包涵

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 但解释器名称不同?

原文由 Sayem 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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 成为真正的遗产。

原文由 vbo 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试将节点链接到 nodejs。首先找出nodejs在哪里

whereis nodejs

然后软链接node到nodejs

 ln -s [the path of nodejs] /usr/bin/node

我假设 /usr/bin 在您的执行路径中。然后您可以通过在命令行中键入 node 或 npm 来进行测试,现在一切都应该可以正常工作了。

原文由 leorex 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题