node.js - 列出 npm 注册表中的所有公共(public)包

标签 node.js npm

出于研究目的,我想列出 所有 npm 上可用的包。我该怎么做?

https://github.com/npm/registry/blob/master/docs/REGISTRY-API.md#get-all 上的一些旧文档提到一个可能曾经工作过的 /-/all 端点,但是 http://registry.npmjs.org/-/all现在只返回 {"message":"deprecated"}.

最佳答案

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 上所有公共(public)包的列表。每个包看起来像:

{"id":"lodash","key":"lodash","value":{"rev":"634-9273a19c245f088da22a9e4acbabc213"}},

在我写这篇文章时,该响应中有 618660 行,大约为 64MB。

如果您想了解有关特定包的更多数据,可以使用其 key 查找特定包 - 例如点击https://replicate.npmjs.com/lodash获取包含 Lodash 描述和发布历史等内容的巨大文档。

如果您想要所有软件包的所有当前数据,您可以使用 include_docs _all_docs 的参数以在响应中包含实际的文档正文 - 即点击 https://replicate.npmjs.com/_all_docs?include_docs=true .为大量数据做好准备。

如果您需要更多数据,例如下载次数,这些数据不包含在这些 CouchDB 文档中,那么值得仔细阅读 https://github.com/npm/registry/tree/master/docs 上的文档。其中详细介绍了其他一些可用的 API - 需要注意的是,问题中指出,并非其中记录的所有内容实际上都有效。

关于node.js - 列出 npm 注册表中的所有公共(public)包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48251633/

相关文章:

node.js - Webpack 开发服务器 "before"功能

mysql - 将 SQL 结果转换为 JSON 的正确方法

javascript - 我可以在 app.get 中使用不同路径的 app.use

javascript - 使用带有 socket.io 的房间

typescript - 打字 vs @types NPM 作用域

javascript - 如何使用 Cloud Functions 的自定义域作为 POST 请求

javascript - npm 运行脚本的命名参数

node.js - 执行命令: npm run serve时出错

Npm 错误 - 找不到匹配的版本

javascript - 如何使用 Auth0 配置 SystemJS?