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

时间:2014-01-16 17:02:54

标签: node.js ubuntu npm

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

  

Node.js解释器命令的上游名称是“node”。     在Debian中,解释器命令已更改为“nodejs”。

     

这样做是为了防止名称空间冲突:其他命令使用     其上游的名称相同,例如来自“节点”的ax25节点     封装

     

必须将调用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已安装在系统上,但解释器名称不同?

16 个答案:

答案 0 :(得分:1082)

TL; DR:

sudo apt-get install nodejs-legacy

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

以下是委员会决议草案的引用,该草案发表于Debian mailing list

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

  2.   
  3. nodejs源包还应在Priority:extra中提供nodejs-legacy二进制包,其中包含/ usr / bin / node作为符号链接   在/ usr / bin中/的NodeJS。存档中的任何包都不能依赖或推荐   nodejs-legacy包,仅为上游提供   兼容性。此包声明还应声明冲突:   与节点包的关系。

  4.         

    < ...>

第2段是OP问题的实际解决方案。 OP应该尝试安装此软件包,而不是手动执行符号链接。以下是Debian软件包索引website中此软件包的链接。

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

我还没有找到关于NPM开发人员采用整个事情的任何信息,但我认为npm包将在某个点修复,nodejs-legacy真正成为遗产。

答案 1 :(得分:109)

尝试将节点链接到nodejs。首先找出nodejs的位置

whereis nodejs

然后软链接节点到nodejs

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

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

答案 2 :(得分:41)

您还可以使用 NVM Nodejs版本管理器安装Nodejs。使用版本管理器有很多benefits。其中一个是你不必担心这个问题。


说明:


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

可以找到最佳教程here

答案 3 :(得分:17)

  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
    

答案 4 :(得分:13)

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之后。

答案 5 :(得分:11)

对我来说问题解决了,

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

答案 6 :(得分:9)

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

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

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

然后全局安装 n 模块:

npm install -g n

由于首先安装了系统节点(上图),因此备用系统可以用于干净地指向 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

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

update-alternatives --config node

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

alias node='/usr/bin/node'

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

答案 7 :(得分:8)

在Linux Mint 17上,我尝试了两种解决方案(创建符号链接或使用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。之后,我可以在全球范围内安装软件包。

答案 8 :(得分:8)

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

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

或者编写基本的bash来下载zip / tar,解压移动文件夹并创建一个软链接。无论何时需要更新,只需将旧软链接指向新下载的版本即可。 就像我为自己创造的那样,你可以参考: 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

答案 9 :(得分:5)

here

的简单解决方案
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash --
sudo apt-get install nodejs

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

答案 10 :(得分:4)

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

'%m/%d/%Y'

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

en_US

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

答案 11 :(得分:4)

您的系统无法检测路径节点js binary。

1.which节点

2.然后将软链接节点发送到nodejs

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

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

答案 12 :(得分:2)

我修复了unlinking / usr / sbin / node(链接到ax25-node包),然后我在命令行上创建了一个指向nodejs的链接

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

因为诸如karma这样的包不能与nodejs名称一起使用,但是将karma脚本的第一行从node更改为nodejs,但我更喜欢一劳永逸地解决这个问题

答案 13 :(得分:1)

问题不在安装人员中 用节点替换nodejs或将路径从/ usr / bin / nodejs更改为/ usr / bin / node

答案 14 :(得分:1)

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

之后,您可以轻松安装软件包。要安装软件包,这可能对您有所帮助

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

答案 15 :(得分:0)

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