提问者:小点点

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


共3个答案

匿名用户

TL;DR:

sudo apt-get install nodejs-legacy

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

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

>

  • nodejs包应更改为提供/usr/bin/nodejs,而不是/usr/bin/node。该包应该声明一个breaks:与Debian中引用/usr/bin/node的任何包的关系。

    nodejs源软件包还应以优先级提供一个nodejs-legacy二进制软件包:extra,它包含/usr/bin/node作为/usr/bin/nodejs的符号链接。归档文件中的任何包都不能依赖或推荐nodejs-legacy包,该包仅用于上游兼容
    。此包声明的同时也应声明一个冲突:与节点包的关系。

    <...>;

    第2款是《任择议定书》问题的实际解决办法。OP应该尝试安装这个软件包,而不是手动进行符号链接。这里有一个链接到这个包在Debian包索引网站。

    可以使用sudo apt-get install nodejs-legacy安装它。

    我还没有找到任何关于NPM开发人员采用整个系统的信息,但是我认为NPM包将在某一点上被修复,nodejs-legacy将成为真正的遗留系统。

  • 匿名用户

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

    whereis nodejs
    

    然后将node软链接到nodejs

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

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

    匿名用户

    您也可以使用NVM或Nodejs版本管理器安装Nodejs使用版本管理器有很多好处。其中之一就是你不必担心这个问题。



    sudo apt-get update
    sudo apt-get install build-essential libssl-dev
    

    一旦安装了先决条件包,您就可以从项目的GitHub页面下拉nvm安装脚本。版本号可能不同,但一般情况下,可以使用以下语法下载安装:

    curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh
    

    这将下载脚本并运行它。它会将软件安装到您的主目录的子目录中,位于~/.nvm。它还将向您的~/.profile文件添加必要的行以使用该文件。

    要获得对nvm功能的访问权限,您需要注销并再次登录,或者您可以获取~/.profile文件,以便当前会话了解更改:

    source ~/.profile
    

    现在您已经安装了nvm,您可以安装独立的Node.js版本。

    要查找可供安装的Node.js版本,可以键入:

    nvm ls-remote
    . . .
    
    v0.11.10
    v0.11.11
    v0.11.12
    v0.11.13
    v0.11.14
    

    正如您所看到的,在编写本文时,最新的版本是V0.11.14。您可以通过键入以下内容进行安装:

    nvm install 0.11.14
    

    通常,nvm会切换到使用最近安装的版本。您可以通过键入以下内容显式地告诉nvm使用我们刚刚下载的版本:

    nvm use 0.11.14
    

    当您使用nvm安装node.js时,可执行文件称为node。您可以通过键入以下内容来查看shell当前正在使用的版本:

    node -v
    

    Complete教程可以在这里找到