尝试安装任何模块时"消息无法从注册表中获取"

Dex*_*ter 349 node.js npm

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

npm install socket.io
Run Code Online (Sandbox Code Playgroud)

上面的命令产生了以下输出,它无法安装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
Run Code Online (Sandbox Code Playgroud)

我的NPM版本是:

[applmgr@dev node_modules]$ npm --version
1.1.0-3
Run Code Online (Sandbox Code Playgroud)

我的NodeJS版本是:

[applmgr@dev node_modules]$ node --version
v0.6.10
Run Code Online (Sandbox Code Playgroud)

Joh*_*ter 804

我有npm v1.1.4(和node v0.6.12)这个问题,它是Ubuntu 12.04存储库版本.

看起来这个版本npm不再受支持了,更新节点(和它的npm)解决了这个问题.

首先,卸载过时的版本(可选,但我认为这解决了我遇到的全局模块未被修改的问题).

sudo apt-get purge nodejs npm
Run Code Online (Sandbox Code Playgroud)

然后启用nodesource的repo并安装:

curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)

注意 - 之前的建议是使用Chris Lea的repo,他现在将其迁移到nodesource,请参阅:

来自:这里

  • 这个答案对我有用,但接受的答案却没有. (20认同)
  • 请注意,nodejs包中包含npm和nodejs-dev,因此从ppa安装nodejs可以获得npm所需的一切. (13认同)
  • 使用这些说明并在覆盆子pi(Raspbian)上获取Segmentation故障后,我删除了端口并按照这些说明https://gist.github.com/justinjenkins/16adc15338bb265f6808现在它可以正常工作! (5认同)
  • 谢谢!这对我有用!这将是"Ask Ubuntu"的接受答案,但似乎很多非Ubuntu用户发现接受的答案是有帮助的. (2认同)
  • 在raspbery pi上运行此命令并在运行nodejs或npm时出现Segmentation故障 (2认同)
  • -1推荐不知情的新手做一些不明智和不安全的事情,因为*管道代码从互联网上的未经验证的来源到根shell*.不负责任的人几乎无法掩盖它.如果不建议验证校验和,您至少应该对安全性提出警告. (2认同)

Dex*_*ter 641

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

我必须执行以下命令:

npm config set registry http://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)

但是,这将使npm安装包通过不安全的HTTP连接.如果可以的话,你应该坚持下去

npm config set registry https://registry.npmjs.org/
Run Code Online (Sandbox Code Playgroud)

而是通过HTTPS安装.

  • 即使有效,也不要使用这种不安全的解决方案.Node.js的apt-get版本太旧了(0.6.12); 我从GitHub安装了最新的稳定版本,它解决了这个问题. (38认同)
  • 警告:这会通过/ insecure/connection拉取资源.您的文件可能会在获得之前更改.再说一遍:这不安全. (28认同)
  • 使用树莓派,这是我必须使用的命令.将https://registry.npmjs.org/pi-gpio更改为http://registry.npmjs.org/pi-gpio.不确定pi无法访问https (7认同)
  • 是的,这也是为我做的.感谢分享! (6认同)
  • 它不适用于其他一些nodejs包.我只是从[官方网站](http://nodejs.org/)下载更新版本的node.js并手工编译. (2认同)

geo*_*eon 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
Run Code Online (Sandbox Code Playgroud)

在那之后,npm已经被包括在内并且工作得很好.


Tus*_*har 17

您还需要安装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
Run Code Online (Sandbox Code Playgroud)

  • 这应该被标记为正确的答案.这个对我有用 (3认同)
  • 经过上述步骤,我们都需要做的是:sudo npm install -g karma (3认同)

Kat*_*tie 17

对我来说,这通常是一个代理问题,我尝试了一切:

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
Run Code Online (Sandbox Code Playgroud)

  • 使用`npm config set strict-ssl false`禁用严格的SSL. (4认同)

Edw*_*Tan 8

有一件事对我来说是随机的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
Run Code Online (Sandbox Code Playgroud)


Bri*_*Low 6

现在有来自joyent(primary nodejs backer)的官方指示.对于Ubuntu:

sudo apt-get purge nodejs npm
curl -sL https://deb.nodesource.com/setup | sudo bash -
sudo apt-get install -y nodejs
Run Code Online (Sandbox Code Playgroud)

对于其他unix发行版,osx和windows查看链接.请注意,这将安装节点和npm.


rad*_*tek 5

对于我来说,唯一适合我的是基础操作系统Luna,一个Ubuntu Fork.我在x86架构上.我在这里尝试了所有的答案,但最终决定从源代码安装它.

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

sudo apt-get purge nodejs npm -y
Run Code Online (Sandbox Code Playgroud)

我去了下载页面查找最新的源代码并下载它,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
Run Code Online (Sandbox Code Playgroud)

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

which npm node
Run Code Online (Sandbox Code Playgroud)

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

sudo chown -R $USER /usr/local
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,请检查您的路径:

echo $PATH
Run Code Online (Sandbox Code Playgroud)

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