在Ubuntu中不能使用节点包pipe理器来安装软件包

Ubuntu上的nodejs解释器名称( node )由于与其他软件包的名称冲突而被重命名为nodejs 。 这是readme.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已经安装在系统上,但是解释器的名字是不一样的?

TL; DR:

 sudo apt-get install nodejs-legacy 

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

以下是Debian 邮件列表中发布的委员会决议草案的一句话:

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

  2. nodejs源码包还应提供一个包含/ usr / bin / node的Priority:extra作为/ usr / bin / nodejs的符号链接的nodejs-legacy二进制包。 档案中没有包可以依赖或推荐专为上行提供的nodejs-legacy包
    兼容性。 这个包声明也应该声明与节点包的冲突:关系。

<…>

第2款是OP问题的实际解决scheme。 OP应该尝试安装这个软件包,而不是手动执行符号链接。 这里是Debian软件包索引网站的这个软件包的链接。

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

我还没有发现关于NPM开发者采用整个事情的任何信息,但是我认为npm包将被固定在某个点上,并且nodejs-legacy变成了真正的遗产。

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

 whereis nodejs 

然后软链接节点到nodejs

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

我假设/ usr / bin在你的执行path。 然后你可以在你的命令行里inputnode或者npm进行testing,现在一切都可以正常工作。

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

说明:

 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文件中以使用该文件。

要访问nvmfunction,您需要注销并重新login,或者可以获取〜/ .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。 你可以通过input以下命令来安装

 nvm install 0.11.14 

通常,nvm将切换到使用最近安装的版本。 您可以通过键入以下命令来明确告诉nvm使用我们刚刚下载的版本:

 nvm use 0.11.14 

当您使用nvm安装Node.js时,可执行文件被称为节点。 您可以通过键入以下命令来查看shell正在使用的版本:

 node -v 

这个补充教程可以在这里find

  1. 首先安装nvm使用:

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

     source ~/.profile 
  3. 现在运行这个,这将显示将所有安装或其他版本的软件包:

     nvm ls-remote 
  4. 安装的软件包将是绿色的。 安装你想要的任何版本:

     nvm install 6.0.0 
  5. 检查未安装的位置:

     which node 
  6. 检查当前版本:

     node -v n=$(which node); n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local 
 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之后。

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

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

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

然后在全局安装n模块:

 npm install -gn 

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

 update-alternatives --remove-all node 

然后添加由n提供的节点:

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

接下来添加系统提供的节点(用curl安装的节点):

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

现在使用交互式菜单select由n提供的/usr/local/bin/node从以下命令提供的菜单中select/usr/local/bin/node ):

 update-alternatives --config node 

最后,由于/usr/local/bin通常在PATH中比在/usr/bin具有更高的优先级,因此如果替代系统节点有效,则必须创build以下别名(input到.bashrc或.zshrc中) 否则在/ usr / local / bin中安装n的节点始终优先:

 alias node='/usr/bin/node' 

现在,您可以轻松地在n <desired node version number>之间切换节点版本。

在Linux Mint 17上,我尝试了两种解决scheme(创build符号链接或使用nodejs-legacy包),但都没有成功。

终于为我工作的唯一的东西是使用Chris Lea的ppa:

 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。 之后,我可以在全球安装软件包。

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

我会推荐像nvm和n这样的工具来pipe理你的节点版本。 切换和使用这些模块非常方便。 https://github.com/creationix/nvm https://github.com/tj/n

或者写下基本的bash来下载zip / tar,提取移动文件夹并创build一个软链接。 无论何时需要更新,只需将旧的软链接指向新下载的版本即可。 就像我为自己创build的,你可以参考: https : //github.com/deepakshrma/NodeJs-4.0-Reference-Guide/blob/master/nodejs-installer.sh

 #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 

对于我来说问题解决了,

 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 

这里简单的解决scheme

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

您可以通过更改setup_x.x值来指定版本,例如setup_5.x

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

然后重新安装为:

 sudo apt-get install autoclean sudo apt-get install nodejs-legacy npm install 

我解决了它的链接/ usr / sbin /节点(这是链接到ax25节点包),然后我已经创build一个链接到nodejs使用这个命令行

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

因为像karma这样的包不能和nodejs的名字一起工作,但是把第一行的karma脚本从节点改成nodejs,但是我宁愿一劳永逸地解决这个问题

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

 sudo apt-get --purge remove node sudo apt-get --purge remove nodejs-legacy sudo apt-get --purge remove nodejs 

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

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

现在你可以安装你想要的任何版本的节点,并在版本之间切换。

您的系统不能检测到path节点js二进制文件。

那个节点

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

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

我假设/ usr / bin在你的执行path。 然后你可以在你的命令行里inputnode或者npm进行testing,现在一切都可以正常工作。

你可以在/usr/bin创build一个链接ln -s nodejs节点,希望能解决你的问题。

问题不在安装程序中
用节点replacenodejs或将path从/ usr / bin / nodejs更改为/ usr / bin / node

您可以通过以下步骤在您的Ubuntu Os中安装nodejs

 sudo apt-get update sudo apt-get install nodejs sudo apt-get install build-essential 

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

之后,您可以轻松地安装软件包。 要安装软件包,这可能会帮助你

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