关于node.js:无法在Ubuntu中使用节点包管理器安装包

Cannot install packages using node package manager in Ubuntu

Ubuntu上的nodejs解释器名称(node已重命名为nodejs,因为名称与另一个包冲突。以下是自述文件。迪比说:

The upstream name for the Node.js interpreter command is"node".
In Debian the interpreter command has been changed to"nodejs".

This was done to prevent a namespace collision: other commands use
the same name in their upstream, such as ax25-node from the"node"
package.

Scripts calling Node.js as a shell command must be changed to instead
use the"nodejs" command.

但是,使用nodejs会破坏使用npm安装软件包。包安装失败,错误如下:

1
2
3
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已经安装在系统上,但解释器名称不同?


DR:

1
sudo apt-get install nodejs-legacy

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

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

  • The nodejs package shall be changed to provide /usr/bin/nodejs, not /usr/bin/node. The package should declare a Breaks: relationship with
    any packages in Debian that reference /usr/bin/node.

  • The nodejs source package shall also provide a nodejs-legacy binary package at Priority: extra that contains /usr/bin/node as a symlink to
    /usr/bin/nodejs. No package in the archive may depend on or recommend
    the nodejs-legacy package, which is provided solely for upstream
    compatibility. This package declares shall also declare a Conflicts:
    relationship with the node package.

  • <...>

    第2段是OP问题的实际解决方案。OP应该尝试安装这个包,而不是手动执行symlink。在Debian Package Index网站上有一个指向这个包的链接。

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

    我没有发现任何关于NPM开发人员采用这一整体的信息,但我认为npm包将固定在某个点上,nodejs-legacy将成为真正的遗产。


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

    1
    whereis nodejs

    然后软链接节点到节点

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

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


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

    说明:

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

    一旦安装了必备软件包,就可以从项目的Github页面中下拉NVM安装脚本。版本号可能不同,但一般来说,您可以使用以下语法下载并安装它:

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

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

    要访问NVM功能,您需要注销并重新登录,或者您可以源~/.profile文件,以便当前会话了解更改:

    1
    source ~/.profile

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

    要查找可用于安装的node.js版本,可以键入:

    1
    2
    3
    4
    5
    6
    7
    8
    nvm ls-remote
    . . .

    v0.11.10
    v0.11.11
    v0.11.12
    v0.11.13
    v0.11.14

    如您所见,本文撰写时的最新版本是v0.11.14。您可以通过键入以下内容来安装:

    1
    nvm install 0.11.14

    通常,NVM会切换到使用最新安装的版本。您可以通过键入以下内容明确告诉NVM使用我们刚下载的版本:

    1
    nvm use 0.11.14

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

    1
    node -v

    Comeplete教程可以在这里找到


  • 先安装nvm,使用:

    1
    curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash
  • 运行命令

    1
    source ~/.profile
  • 现在运行此程序,将显示所有已安装或其他版本的软件包:

    1
    nvm ls-remote
  • 安装的软件包将为绿色。安装您想要的任何版本:

    1
    nvm install 6.0.0
  • 检查未安装的位置:

    1
    which node
  • 检查当前版本:

    1
    2
    3
    4
    5
    6
    node -v

    n=$(which node);
    n=${n%/bin/node};
    chmod -R 755 $n/bin/*;
    sudo cp -r $n/{bin,lib,share} /usr/local

  • 1
    2
    3
    4
    5
    6
    sudo apt-get --purge remove node
    sudo apt-get --purge remove nodejs-legacy
    sudo apt-get --purge remove nodejs

    sudo apt-get install nodejs-legacy
    source ~/.profile

    结合已被折叠的评论中的source ~/.profile和之前的一些清理命令,得出了公认的答案。最有可能的情况是,您还需要在之后使用sudo apt-get install npm


    对我来说,问题是通过

    1
    2
    3
    4
    5
    6
    7
    8
    sudo apt-get remove node
    sudo apt-get remove nodejs
    curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
    sudo apt-get install -y nodejs
    sudo ln -s /usr/bin/nodejs /usr/bin/node
    alias node=nodejs
    rm -r /usr/local/lib/python2.7/dist-packages/localstack/node_modules
    npm install -g npm@latest || sudo npm install -g npm@latest


    这是我使用的另一种方法,因为我喜欢在节点版本之间轻松切换。

    在新的Ubuntu系统上,首先安装"system"节点:

    1
    curl -sL https://deb.nodesource.com/setup | sudo bash -

    然后全局安装n个模块:

    1
    npm install -g n

    由于系统节点是首先安装的(如上),所以可以使用备选系统干净地指向n提供的节点。首先确保备选系统没有节点:

    1
    update-alternatives --remove-all node

    然后添加n提供的节点:

    1
    update-alternatives --install /usr/bin/node node /usr/local/bin/node 1

    下一个添加系统提供的节点(安装了curl的节点):

    1
    update-alternatives --install /usr/bin/node node /usr/bin/nodejs 2

    现在,使用交互菜单选择n提供的节点(从以下命令显示的菜单中选择/usr/local/bin/node)。

    1
    update-alternatives --config node

    最后,由于/usr/local/bin在路径上通常比/usr/bin具有更高的优先级,如果要使备选系统节点有效,则必须创建以下别名(在.bashrc或.zsrc中输入);否则,安装了n in/usr/local/bin的节点始终优先:

    1
    alias node='/usr/bin/node'

    现在,您可以轻松地在使用n 的节点版本之间进行切换。


    在LinuxMint17上,我尝试了两种解决方案(创建一个symlink或使用nodejs-legacy包),但都没有成功。

    唯一对我起作用的是使用Chris Lea的PPA:

    1
    2
    3
    4
    5
    sudo apt-get purge node-*
    sudo apt-get autoremove
    sudo add-apt-repository ppa:chris-lea/node.js
    sudo apt-get update
    sudo apt-get install nodejs

    这安装了节点版本10.37和NPM 1.4.28。之后,我可以在全球安装软件包。


    正如其他人已经提到的,我建议不要使用"sudo-apt-get"来安装节点或任何开发库。您可以从https://nodejs.org/dist/v6.9.2/下载所需版本,并设置您自己的环境。

    我将推荐NVM和N等工具来管理您的节点版本。切换和使用这些模块非常方便。https://github.com/creationix/nvm网址:https://github.com/tj/n

    或者编写基本的bash来下载zip/tar,提取move文件夹并创建一个软链接。每当需要更新时,只需将旧的软链接指向新下载的版本。就像我为自己创造的一样,你可以参考:https://github.com/deepakshrma/nodejs-4.0-reference-guide/blob/master/nodejs-installer.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #Go to home
    cd ~
    #run command
    #New Script
    wget https://raw.githubusercontent.com/deepakshrma/NodeJs-4.0-Reference-Guide/master/nodejs-installer.sh
    bash nodejs-installer.sh -v lts
    #here -v or --version can be sepecific to 0.10.37 or it could be latest/lts
    #Examples
    bash nodejs-installer.sh -v lts
    bash nodejs-installer.sh -v latest
    bash nodejs-installer.sh -v 4.4.2

    这里的简单解决方案

    1
    2
    curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash --
    sudo apt-get install nodejs

    您可以通过更改Setup_x.x值来指定版本,例如将其设置为Setup_5.x


    系统无法检测路径节点JS二进制文件。

    1.哪个节点

    2.然后软链接节点到节点

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

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


    卸载您拥有的任何节点版本

    1
    2
    3
    sudo apt-get --purge remove node
    sudo apt-get --purge remove nodejs-legacy
    sudo apt-get --purge remove nodejs

    安装NVM(节点版本管理器)https://github.com/creationix/nvm

    1
    wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

    现在,您可以安装所需节点的任何版本,并在这些版本之间进行切换。


    我修复了它取消链接/usr/sbin/node(它链接到ax25节点包),然后我在命令行上创建了一个到nodejs的链接。

    1
    sudo ln -s /usr/bin/nodejs /usr/bin/node

    因为像karma这样的包不适用于nodejs名称,但是将karma脚本的第一行从nodejs改为nodejs,但是我更愿意一次性解决这个问题。


    对我来说,修复是删除node*包和npm包。

    然后重新安装如下:

    1
    2
    3
    sudo apt-get install autoclean
    sudo apt-get install nodejs-legacy
    npm install


    安装程序中没有问题将nodejs替换为node或将路径从/usr/bin/nodejs更改为/usr/bin/node


    这是您的节点没有正确安装,首先需要卸载该节点,然后重新安装。要安装节点,这可能有助于http://array151.com/blog/nodejs-tutorial-and-set-up/

    之后,您可以轻松地安装软件包。要安装软件包,这可能有助于您

    http://array151.com/blog/npm-node-package-manager/


    可以在/usr/bin中创建链接ln -s nodejs节点。希望这能解决你的问题。