无法使用“npm install”在Node.js中安装任何软件包

49

我是Node.js的新手,正在学习一些教程。 但是出现了一个问题,我无法安装任何新的node模块。

我的环境如下: Mac OSX 10.7.4, Node v. 0.8.6, NPM v. 1.1.48.

我运行npm install X命令时,总是会遇到一个错误:

npm ERR! fetch failed https://registry.npmjs.org/-/X
npm ERR! Error: 404 Not Found

当我实际访问npmjs的注册表时,可以看到项目页面,但无论我点击哪个tarball链接,都是相同的:

{
    "error": "not_found",
    "reason": "document not found"
}
例如,我尝试通过运行“npm install fs”来安装“fs”,但是我收到了以下错误信息:
npm http GET https://registry.npmjs.org/fs
npm http 200 https://registry.npmjs.org/fs
npm http GET https://registry.npmjs.org/-/fs-0.0.0.tgz
npm http 404 https://registry.npmjs.org/-/fs-0.0.0.tgz
npm ERR! fetch failed https://registry.npmjs.org/-/fs-0.0.0.tgz
npm ERR! Error: 404 Not Found
npm ERR!     at null.<anonymous> (/usr/local/lib/node_modules/npm/lib/utils/fetch.js:47:16)
npm ERR!     at EventEmitter.emit (events.js:115:20)
npm ERR!     at WriteStream.flush (fs.js:1514:12)
npm ERR!     at fs.close (/usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:92:5)
npm ERR!     at Object.oncomplete (fs.js:297:15)
npm ERR! If you need help, 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! System Darwin 11.4.0
npm ERR! command "node" "/usr/local/bin/npm" "install" "fs"
npm ERR! cwd /Users/comocomo/Documents/workspace/nodeTest
npm ERR! node -v v0.8.6
npm ERR! npm -v 1.1.48
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/comocomo/Documents/workspace/nodeTest/npm-debug.log
npm ERR! not ok code 0

我尝试使用fs、fs-extra、express和formidable,但都得到相同的404响应。肯定是我的问题,我非常确定整个注册表并没有出错。

我是否在使用旧的注册表?我应该在配置文件中更改吗?我真的不想手动安装东西,而且我确信这只是一个小的配置问题。

谢谢!


1
你正在运行什么精确命令? - Brad
2
对于fs,我使用了npm install fs。 - Ido Cohn
6
你没有做错任何事情。NPM仓库可能存在问题。我也无法下载它们,但今天早些时候还能下载。 - Brad
谢谢,我今天稍后会重新检查。 - Ido Cohn
7个回答

96

我发现有一个证书过期的问题:

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

所以我把它变成了http,而不是https :-

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

截至目前为止,我没有遇到任何问题。


寻找这个解决方案。谢谢。 - Kishore Relangi
3
这并没有解决我的问题。它仍在从“https://registry.npmjs.org/”获取。Node版本为0.12.7,npm版本为“2.12.1”。有任何帮助吗? - Yashika Garg
肮脏的解决方案(我是以好的方式说的)。问题已经修复。有人给这个人一个ZJ。 - Huntario
1
我遇到了这个问题,而且这个答案没有解决它。在检查https时,证书似乎没有问题,在Chrome中的挂锁显示为绿色。 - kayleeFrye_onDeck
这难道不是极其危险的吗?任何中间人现在都可以欺骗npm注册表,通过修改模块来劫持您的安装,从而在您的计算机上执行任何操作。我们确定没有更好的解决方案吗? - olleicua
显示剩余2条评论

10

仓库不是停机状态,看起来他们改变了文件的托管方式(我猜他们已经恢复了一些旧代码):

现在你需要在“-”之前添加“/package-name/”

例如:

http://registry.npmjs.org/-/npm-1.1.48.tgz
http://registry.npmjs.org/npm/-/npm-1.1.48.tgz

有三种解决方法:

  • 使用完整的镜像:
  • 使用公共代理:

    --registry http://165.225.128.50:8000

  • 搭建本地代理:

    https://github.com/hughsk/npm-quickfix

git clone https://github.com/hughsk/npm-quickfix.git
cd npm-quickfix
npm set registry http://localhost:8080/
node index.js

我个人会选择第三种方式,并在问题得到解决后恢复为npm set registry http://registry.npmjs.org/

请关注此处获取更多信息:https://github.com/isaacs/npm/issues/2694


这是真的,我尝试在基本URL之后放置包名称,即http://registry.npmjs.org/,对所有包都有效。似乎NPM没有在URL中在“/-/”之前添加包名称。 - Abhinav Gupta
这确实可以工作,但没有办法告诉npm以那种方式使用链接。我正在安装mongoose: npm install http://registry.npmjs.org/mongoose/-/mongoose-3.0.1.tgz所以它开始下载mongoose,但也下载了所有依赖项。mongoose可以下载,但是依赖项无法下载,因为存储库的链接仍然失效。现在我正在逐个地传递地下载它们(模块之前的依赖项),但我感觉很愚蠢。 有其他的方法吗? - Ido Cohn
最后我只是手动安装了依赖项。谢谢,我给这个答案点了一个+1,但这不是答案。如果您能回答我,我会很感激并关闭问题。 - Ido Cohn
是的,这是我使用过的唯一有效的解决方案。 - TonyB

9

Npm仓库目前不可用。

请查看npm github上的问题#2694

编辑:
在此期间可以使用镜像:

 npm set registry http://ec2-46-137-149-160.eu-west-1.compute.amazonaws.com

您可以稍后用以下方法重置此设置:

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

source


3

这个错误也可能是由代理设置引起的,检查一下你的代理是否允许访问npm命令。

对我来说很有效。


1
npm set registry http://85.10.209.91/

这个代理从registry.npmjs.org获取原始数据,并操作tarball的URL以解决tarball文件结构问题。

其他解决方案似乎有过时的版本。


1
如果您在Windows上运行npm install命令,请确保首先使用管理员权限打开命令提示符。这就是我解决问题的方法。

0

请在安全设置下检查

  • 允许从以下来源下载应用程序:
  • App Store和其他已识别的开发者

这是我最近遇到的原因之一。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接