尝试安装任何模块时出现“无法从注册表获取消息”


355

我无法从npm安装任何节点模块。

npm install socket.io

上面的命令导致下面的输出,它无法安装socket.io

npm http GET https://registry.npmjs.org/socket.io

npm ERR! Error: failed to fetch from registry: socket.io
npm ERR!     at /opt/node0610/lib/node_modules/npm/lib/utils/npm-registry-client/get.js:139:12
npm ERR!     at cb (/opt/node0610/lib/node_modules/npm/lib/utils/npm-registry-client/request.js:32:9)
npm ERR!     at Request._callback (/opt/node0610/lib/node_modules/npm/lib/utils/npm-registry-client/request.js:137:18)
npm ERR!     at Request.callback (/opt/node0610/lib/node_modules/npm/node_modules/request/main.js:109:22)
npm ERR!     at Request.<anonymous> (/opt/node0610/lib/node_modules/npm/node_modules/request/main.js:198:58)
npm ERR!     at Request.emit (events.js:88:20)
npm ERR!     at ClientRequest.<anonymous> (/opt/node0610/lib/node_modules/npm/node_modules/request/main.js:195:10)
npm ERR!     at ClientRequest.emit (events.js:67:17)
npm ERR!     at CleartextStream.<anonymous> (http.js:1134:11)
npm ERR!     at CleartextStream.emit (events.js:67:17)
npm ERR! You may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
npm ERR! 
npm ERR! System Linux 2.6.18-194.el5
npm ERR! command "node" "/opt/node0610/bin/npm" "install" "socket.io"
npm ERR! cwd /opt/node0610/lib/node_modules
npm ERR! node -v v0.6.10
npm ERR! npm -v 1.1.0-3
npm ERR! message failed to fetch from registry: socket.io
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /opt/node0610/lib/node_modules/npm-debug.log
npm not ok

我的NPM版本是:

[applmgr@dev node_modules]$ npm --version
1.1.0-3

我的NodeJS版本是:

[applmgr@dev node_modules]$ node --version
v0.6.10

12
那是一个很旧的npm版本。将其更新为最新版本,然后重试:sudo npm update npm -g
JohnnyHK,2012年

1
约翰尼(Johny)感谢您的评论,实际上,如果我需要更新npm,我是否也应该更新nodejs
Dexter

1
您也不必更新nodejs,但是如果您由于某种原因未绑定到6.x版本,我建议您进行更新。
JohnnyHK

HTTP有效;HTTPS不会,因为Registry.npmjs.org没有监听HTTPS。
2014年

1
我通常会从官方网站下载并编译最新版本的nodejs 。我使用的发行版(通常是Ubuntu LTS)的版本太旧。
Alex Lokk 2014年

Answers:


805

我在npm v1.1.4(和node v0.6.12)(Ubuntu 12.04存储库版本)中遇到了这个问题。

似乎npm不再支持该版本,更新节点(以及npm)解决了该问题。

首先,卸载过时的版本(可选,但是我认为这解决了我无法导入全局模块的问题)。

sudo apt-get purge nodejs npm

然后启用nodesource的仓库并安装:

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs

注意-先前的建议是使用Chris Lea的仓库,他现在已将其迁移到nodesource,请参见:

来自:这里


13
请注意,nodejs软件包包括npm和nodejs-dev,因此从ppa安装nodejs可以获得npm所需的一切。
chawkinsuf 2014年

2
谢谢!这对我有用!这将是“询问Ubuntu”的可接受答案,但是似乎很多非Ubuntu用户都认为该可接受答案是有帮助的。
dannyman 2014年

2
跑这对raspbery PI运行或的NodeJS NPM时得到分割故障
哥斯拉

5
使用这些说明并在树莓派(Raspbian)上出现分段错误后,我删除了端口,并按照以下说明gist.github.com/justinjenkins/16adc15338bb265f6808进行操作!
贾斯汀·詹金斯

2
-1表示建议毫无戒心的新手做一些不明智和不安全的事情,就像从Internet上未经验证的来源到根shell的管道代码一样。不负责任几乎不能掩盖它。如果不建议您验证校验和,则至少应对安全性提出警告。
sorpigal '17

644

https://github.com/isaacs/npm/issues/2119

我必须执行以下命令:

npm config set registry http://registry.npmjs.org/

但是,这将使npm安装软件包通过不安全的HTTP连接进行。如果可以的话,你应该坚持

npm config set registry https://registry.npmjs.org/

而是通过HTTPS安装。


6
是的,这对我也有帮助。感谢分享!
Alix Axel

7
使用树莓派,这是我必须使用的相同命令。将Registry.npmjs.org/pi-gpio更改为Registry.npmjs.org/pi-gpio。不确定pi无法访问https的最新消息
Jdahern 2013年

28
警告:这会通过/不安全/连接拉入资源。在获取文件之前,可能会对其进行更改。再次:这是不安全的。
Lodewijk 2014年

38
即使有效,也不要使用此不安全的解决方案。Node.js的apt-get版本太旧(0.6.12); 我从GitHub安装了最新的稳定版本,它解决了问题。
路易·阿梅琳

2
它不适用于其他一些nodejs软件包。我只是从官方网站下载新版本的node.js 并手动进行编译。
亚历克斯·洛克

32

我在Ubuntu上。我使用apt-get安装节点。Npm未包含在该软件包中,因此必须单独安装。我以为那可以用,但是显然Ubuntu发行版中的npm版本已经过时了。

节点Wiki具有以下说明:

获取最新版本的Node或在较旧的Ubuntu和其他基于apt的发行版上安装可能需要一些额外的步骤。安装示例:

sudo apt-get update
sudo apt-get install -y python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

在那之后,npm已经被包含在内并且运行良好。


18

对我来说,这通常是代理问题,我会尝试所有操作:

npm config set registry http://registry.npmjs.org/
npm config set strict-ssl false

npm config set proxy http://myusername:mypassword@proxy.us.somecompany:8080
npm config set https-proxy http://myusername:mypassword@proxy.us.somecompany:8080
set HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
set HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTPS_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export HTTP_PROXY=http://myusername:mypassword@proxy.us.somecompany:8080
export http_proxy=http://myusername:mypassword@proxy.us.somecompany:8080

npm --proxy http://myusername:mypassword@proxy.us.somecompany:8080 \
--without-ssl --insecure -g install

4
通过使用npm config set strict-ssl false为我禁用的严格SSL 。
Mayura'3

17

您还需要安装software-properties-common才能使add-apt-repository正常工作。所以会的

sudo apt-get purge nodejs npm
sudo apt-get install -y python-software-properties python g++ make software-properties-common
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

3
完成上述步骤后,我们要做的是:sudo npm install -g karma
vijay 2014年

10

使用随机npm安装错误对我有用的一件事(其中在不同时间(但相同的环境)下出错的软件包是不同的)是使用此命令:

npm cache clean

然后重复该过程。然后,该过程似乎会更加顺利,并且将出现真正的问题和错误消息,您可以在此处进行修复然后继续。

这是基于在Docker实例内非常裸露的Ubuntu安装下运行一整套软件包的npm安装的经验。有时,Ubuntu缺少一些构建/制作工具,除非您出于某种原因清理了缓存,否则npm错误不会显示真正的问题。


是的,我发现我必须结合从此处获得的答案来运行此程序。
约翰·鲍威尔

7

此问题归因于https协议,这就是其他解决方案起作用的原因(通过切换到非安全协议)。

对我来说,最好的解决方案是编译节点的最新版本,其中包括npm

apt-get purge nodejs npm
git clone https://github.com/nodejs/node ~/local/node
cd ~/local/node
./configure
make
make install

6

现在有来自joyent(主要的nodejs支持者)的官方说明。对于Ubuntu:

sudo apt-get purge nodejs npm
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs

对于其他unix发行版,osx和Windows请参见链接。请注意,这将同时安装节点和npm。


5

在Elementary OS Luna(Ubuntu Fork)上对我有用的唯一东西。我在x86体系结构上。我在这里尝试了所有答案,但最终决定从源代码安装它。

首先,确保未使用包管理器安装它:

sudo apt-get purge nodejs npm -y

我转到下载页面以查找最新源并将其下载到http://nodejs.org/download/。您可以使用curl,wget或浏览器来获取它:

wget http://nodejs.org/dist/v0.10.34/node-v0.10.34.tar.gz
tar -xvf node-v0.10.34.tar.gz 
cd node-v0.10.34
./configure
make
sudo make install

可能需要一段时间。完成后,您应该已经安装了node和npm并在/ usr / local / bin目录中工作,该目录应该已经在路径上。您应该验证它的位置:

which npm node

我还必须更改权限才能使其正常工作:

sudo chown -R $USER /usr/local

如果无效,请检查您的路径:

echo $PATH

请注意,以这种方式安装它,将不会由apt-get软件包管理器管理。干杯!


请分享问题所在,而不是将其标记下来。这个对我有用!:)
radtek

2

下面的方法对我有用,对github用户表示敬意:midnightcodr

确保删除所有已安装的nodejs / npm软件包。

sudo apt-get purge nodejs

sudo apt-get purge npm

现在使用以下命令安装Node js(感谢github上的midnightcodr)

curl -L https://raw.github.com/midnightcodr/rpi_node_install/master/setup.sh | bash -s 0.10.24

请注意,您可以使用命令node而不是nodejs调用node。

安装节点后,安装npm

sudo apt-get install npm

2

最近,在将node.js(不可避免地是npm)升级到最新版本之后,我遇到了这个问题:

> npm --version < 2.0.0-alpha-5

注意:我不是要求一个不稳定的版本,而是brew install npm在OSX上获得它。

降级npm为我解决了这个问题。

安装稳定的npm的最简单方法是,npm install -g npm但在某些情况下可能无法正常工作,然后可能需要降级node.js。


1

可能是npm注册表当时已关闭,或者您的连接已断开。

无论哪种方式,您都应该升级node和npm。

我建议使用nave来管理您的节点环境。

https://npmjs.org/package/nave

它使您可以轻松安装版本并在它们之间快速跳转。


1

对于树莓派,我发现并修改了一个解决方案,我在
这里找到的是我运行的

sudo su -
cd /opt
wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz
tar xvzf node-v0.10.28-linux-arm-pi.tar.gz
ln -s node-v0.10.28-linux-arm-pi node
chmod a+rw /opt/node/lib/node_modules
chmod a+rw /opt/node/bin
echo 'PATH=$PATH:/opt/node/bin' > /etc/profile.d/node.sh

我唯一的修改是将所有的10.25更改为10.28,这是当时的最新linux-arm-pi


0

@therefromhere的答案是最好的答案。但是,Node版本一直在向上和向上移动,由于io.js的重新合并,版本控制变得很复杂。按照他的答案中的步骤,您将获得Node版本0.10.25 -而不是最新版本。

您仍应使用以下命令清除任何现有的node / npm软件包

sudo apt-get purge nodejs npm

然后转到https://github.com/nodesource/distributions#debinstall上的nodesource deb安装页面。

上面的页面列出所有Node.js版本以及Linux命令来安装它们。这些软件包可以在Debian和Ubuntu上使用

PS如果要在Ubuntu Precise或Debian Wheezy上运行Node v4.4或更高版本,则应查看有关在较旧发行版上运行信息

PPS如果您的apt-get失败,则脚本将无法完成(Google引用使my失败apt-get update)。您应该看到有关将NodeSource签名密钥添加到密钥环的消息,以及指示您进行签名的最终消息Run 'apt-get install nodejs' to install Node.js

PPPS npm与节点一起安装。安装后,您可以使用以下命令更新到最新的npmsudo npm install npm -g

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.