
npm Registry 数据源
Use when the user asks for npm package information — versions, dependencies, download count, author, readme (keywords: npm、包信息、npm包、版本、依赖). Also use for npm user information — user's packages, user profile (keywords: npm用户、npm账号). Provides npm registry metadata. Supports authentication for private packages. Do NOT use for non-npm package registries or yarn/pnpm specific queries.
Skill 文件
| name | npm-registry-datasource |
|---|---|
| title | npm Registry 数据源 |
| description | Use when the user asks for npm package information — versions, dependencies, download count, author, readme (keywords: npm、包信息、npm包、版本、依赖). Also use for npm user information — user's packages, user profile (keywords: npm用户、npm账号). Provides npm registry metadata. Supports authentication for private packages. Do NOT use for non-npm package registries or yarn/pnpm specific queries. |
| tools | curl |
| credentials | NPM_TOKEN |
| credential_help | NPM_TOKEN: '在 https://www.npmjs.com/settings/tokens 创建 Access Token,仅访问私有包时需要' |
npm Registry 数据源
调用 npm 官方 Registry API 获取 npm 包的元数据、版本信息、依赖关系、README 以及用户/组织信息。支持访问私有包(需配置 Token)。
鉴权
npm Registry 的公开 API 无需鉴权即可查询公开包。如果需要访问私有包,请配置 NPM Token:
公开包(默认值):直接发送请求,不传任何 token。
私有包:在请求头携带:
Authorization: Bearer {{secrets.NPM_TOKEN}}注意:npm token 不提升公开 API 的请求速率限制,其主要用途是访问私有包和发布包。
通用约定
- Base URL:
https://registry.npmjs.org(必须使用 HTTPS,HTTP 会被系统拒绝) - 请求方法:GET
- 响应格式:JSON(CouchDB 风格文档)
- 字符编码:UTF-8
- 分页:搜索接口支持分页,其他接口不分页
- 速率限制:无明确限制,但建议不要高频并发请求;如收到 429 请等待后重试
- 包名转义:scope 包需要 URL 编码,
@scope/name→@scope%2Fname
⚠️ 速率限制策略(必须遵守)
- 串行请求:同一时间只发 1 个 curl 请求,等返回后再发下一个。严禁并行发送多个请求
- 请求间隔:每两个请求之间至少间隔 1 秒
- 批量查询:需要查多个包时,一次最多查 5 条,如需更多则分批
- 429 重试:收到 429 错误后等待 60 秒再重试,严禁立即重试
- 数据复用:已获取的列表/枚举类结果应缓存使用,不要重复请求
常用接口
1. 获取包元数据
获取指定 npm 包的所有元数据,包括所有版本、作者、关键词等。
GET https://registry.npmjs.org/{package}参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| package | path | 是 | 包名,如 react、lodash,scope 包需编码如 @types%2Freact |
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
name | string | 包名 |
description | string | 包描述 |
keywords | array | 关键词数组 |
author.name | string | 作者姓名 |
author.email | string | 作者邮箱 |
license | string | 许可证 |
homepage | string | 项目主页 |
repository.url | string | 仓库地址 |
bugs.url | string | Issue 页面 |
versions | object | 所有版本详情(key 为版本号) |
dist-tags.latest | string | 最新版本标签 |
dist-tags.{tag} | string | 其他标签(如 beta、next) |
maintainers[].name | string | 维护者用户名 |
maintainers[].email | string | 维护者邮箱 |
readme | string | 当前版本的 README 内容 |
2. 获取包特定版本详情
获取指定版本的详细信息,包括依赖、dist 文件等。
GET https://registry.npmjs.org/{package}/{version}参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| package | path | 是 | 包名 |
| version | path | 是 | 版本号,如 18.2.0,或用 latest |
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
name | string | 包名 |
version | string | 版本号 |
description | string | 描述 |
main | string | 入口文件 |
types | string | TypeScript 类型定义文件 |
dependencies | object | 运行时依赖(key: 包名, value: semver) |
devDependencies | object | 开发依赖 |
peerDependencies | object | 同级依赖 |
scripts | object | npm scripts |
engines.node | string | 要求的 Node.js 版本 |
engines.npm | string | 要求的 npm 版本 |
dist.tarball | string | 压缩包下载地址 |
dist.shasum | string | 压缩包 SHA1 |
dist.integrity | string | 压缩包完整性校验 |
dist.unpackedSize | number | 解压后大小(字节) |
deprecated | string | 弃用警告信息(如存在) |
_npmUser.name | string | 发布用户用户名 |
3. 搜索包
搜索 npm registry 中的包,支持关键词、作者、scope 等过滤。
GET https://registry.npmjs.org/-/v1/search?text={query}&size={size}&from={from}参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| text | query | 是 | 搜索关键词,支持 author:username、scope:xxx |
| size | query | 否 | 每页条数,默认 20,最大 250 |
| from | query | 否 | 偏移量,用于分页 |
| scope | query | 否 | scope 过滤,如 @types |
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
objects[].package.name | string | 包名 |
objects[].package.version | string | 最新版本 |
objects[].package.description | string | 描述 |
objects[].package.keywords | array | 关键词 |
objects[].package.author.name | string | 作者姓名 |
objects[].package.date | string | 发布时间(ISO 8601) |
objects[].score.final | number | 综合评分(0-1) |
objects[].score.detail.quality | number | 质量分 |
objects[].score.detail.popularity | number | 流行度 |
objects[].score.detail.maintenance | number | 维护度 |
total | number | 搜索结果总数 |
time | string | 请求时间 |
4. 获取用户包列表
获取指定 npm 用户的所有公开包。
GET https://registry.npmjs.org/-/user/{username}/packages参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| username | path | 是 | npm 用户名(区分大小写) |
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
objects[].name | string | 包名 |
objects[].scope | string | scope(如为私有 scope) |
objects[].latest.version | string | 最新版本 |
objects[].latest.deprecated | boolean | 是否已弃用 |
5. 获取组织用户列表
获取组织(org)下的用户列表(需组织公开或权限)。
GET https://registry.npmjs.org/-/org/{org}/user参数:
| 参数名 | 位置 | 必填 | 说明 |
|---|---|---|---|
| org | path | 是 | 组织名 |
关键返回字段:
| JSON Path | 类型 | 说明 |
|---|---|---|
users[].name | string | 用户名 |
users[].role | string | 角色(owner/admin/member) |
调用示例
场景 1:查询包的最新版本和依赖
用户问题:"react 包最新版本是多少,依赖什么?"
- 调用接口获取版本详情:
curl(url = "https://registry.npmjs.org/react/latest", X = "GET")- 从返回中提取:
- 版本:
jq(".version")→"18.2.0" - 依赖:
jq(".dependencies")→{ "loose-envify": "^1.1.0" }
- 版本:
场景 2:搜索某个作者的所有包
用户问题:"sindresorhus 有哪些 npm 包?"
- 搜索该作者的包:
curl(url = "https://registry.npmjs.org/-/v1/search?text=author:sindresorhus&size=20", X = "GET")- 从
objects[].package.name中提取包名列表。
场景 3:获取用户包列表
用户问题:"查查 sindresorhus 有多少 npm 包"
- 调用用户包列表接口:
curl(url = "https://registry.npmjs.org/-/user/sindresorhus/packages", X = "GET")- 统计返回数组长度,或使用搜索接口配合分页获取完整列表。
场景 4:比较两个包的版本
用户问题:"vue 和 react 哪个版本更新?"
- 分两次调用获取最新版本:
curl(url = "https://registry.npmjs.org/vue/latest", X = "GET")# 提取 .versioncurl(url = "https://registry.npmjs.org/react/latest", X = "GET")# 提取 .version- 比较返回的版本号。
场景 5:访问私有包(需 Token)
用户问题:"查询 @mycompany/private-package 的信息"
- 使用 Authorization header 调用:
curl(url = "https://registry.npmjs.org/@mycompany%2Fprivate-package", X = "GET", H = ["Authorization: Bearer {{secrets.NPM_TOKEN}}"])- 提取所需字段。
错误处理
| HTTP 状态码 | 含义 | 应对方式 |
|---|---|---|
| 200 | 成功 | 正常解析响应 JSON |
| 404 | 包/用户不存在 | 提示用户检查拼写,或告知"未找到指定包/用户" |
| 401 | 需要认证 | 如果是私有包,请提示用户配置 NPM_TOKEN |
| 429 | 请求过多(Rate Limited) | 等待 60 秒后重试,期间不要发送新请求 |
| 500/502/503 | 服务端错误 | 等待 30 秒后重试,多次失败则告知服务暂时不可用 |
| 400 | 请求参数错误 | 检查包名格式、版本号格式是否正确 |
数据边界说明
- 弃用包:
deprecated字段不为 null 时表示该版本已弃用,应提示用户谨慎使用 - 私有包:无权限访问时会返回 404 或 401,不代表包不存在
- Scope 包编码:
@types/react需编码为@types%2Freact - 下载量数据:Registry 本身不提供下载量,需使用 npm API(
https://api.npmjs.org/downloads/point/{period}/{package})或 npms.io 的搜索接口获取近似值 - README 缓存:
readme字段可能为空或已缓存的旧版本,最新 README 建议从 GitHub 仓库获取