出于研究目的,我想列出所有在npm上可用的软件包。我怎么能这样做?
https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#get-all处的一些旧文档提到了/-/all
端点,可能曾经有效,但http://registry.npmjs.org/-/all现在只返回{"message":"deprecated"}
。
答案 0 :(得分:12)
http://blog.npmjs.org/post/157615772423/deprecating-the-all-registry-endpoint描述了http://registry.npmjs.org/-/all端点的弃用,以及作为替代方法的https://github.com/npm/registry/blob/master/docs/follower.md教程的链接。该教程描述了如何设置“跟随者”,以接收对NPM注册表所做的所有更改。那是......有点奇怪,说实话。显然,如果您想在整个NPM生态系统上进行数据分析,这样的关注者不能充分代替获取所有包的列表。
但是,在该代码库中,我们了解到NPM注册表的核心是位于https://replicate.npmjs.com的CouchDB数据库。 _all_docs
端点未被禁用,因此我们可以在https://replicate.npmjs.com/_all_docs点击它以获取一个JSON对象,其rows
属性包含NPM上所有公共包的列表。每个包看起来像:
{"id":"lodash","key":"lodash","value":{"rev":"634-9273a19c245f088da22a9e4acbabc213"}},
在我写这篇文章时,该响应中有618660行,大约为64MB。
如果您想了解有关特定产品包的更多数据,可以使用其key
查找特定产品包 - 例如点击https://replicate.npmjs.com/lodash获取包含Lodash描述和发布历史等内容的巨大文档。
如果您需要有关所有软件包的所有当前数据,可以使用_all_docs
参数xxxx depends on xxxx; however:
Package xxxx is not installed.
将实际文档正文包含在响应中 - 即点击include_docs
。为大量数据做好准备。
如果您还需要更多数据,例如下载次数,而这些数据未包含在这些CouchDB文档中,那么值得仔细阅读https://replicate.npmjs.com/_all_docs?include_docs=true中详细介绍其他可用API的文档 - 并注意到问题,并非那里记录的所有内容都有效。