npm Registry 数据源
数据官方

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.

hustcc
hustcc
浏览3.9万
使用2

Skill 文件

SKILL.md
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 URLhttps://registry.npmjs.org(必须使用 HTTPS,HTTP 会被系统拒绝)
  • 请求方法:GET
  • 响应格式:JSON(CouchDB 风格文档)
  • 字符编码:UTF-8
  • 分页:搜索接口支持分页,其他接口不分页
  • 速率限制:无明确限制,但建议不要高频并发请求;如收到 429 请等待后重试
  • 包名转义:scope 包需要 URL 编码,@scope/name@scope%2Fname

⚠️ 速率限制策略(必须遵守)

  1. 串行请求:同一时间只发 1 个 curl 请求,等返回后再发下一个。严禁并行发送多个请求
  2. 请求间隔:每两个请求之间至少间隔 1 秒
  3. 批量查询:需要查多个包时,一次最多查 5 条,如需更多则分批
  4. 429 重试:收到 429 错误后等待 60 秒再重试,严禁立即重试
  5. 数据复用:已获取的列表/枚举类结果应缓存使用,不要重复请求

常用接口

1. 获取包元数据

获取指定 npm 包的所有元数据,包括所有版本、作者、关键词等。

GET https://registry.npmjs.org/{package}

参数

参数名位置必填说明
packagepath包名,如 reactlodash,scope 包需编码如 @types%2Freact

关键返回字段

JSON Path类型说明
namestring包名
descriptionstring包描述
keywordsarray关键词数组
author.namestring作者姓名
author.emailstring作者邮箱
licensestring许可证
homepagestring项目主页
repository.urlstring仓库地址
bugs.urlstringIssue 页面
versionsobject所有版本详情(key 为版本号)
dist-tags.lateststring最新版本标签
dist-tags.{tag}string其他标签(如 beta、next)
maintainers[].namestring维护者用户名
maintainers[].emailstring维护者邮箱
readmestring当前版本的 README 内容

2. 获取包特定版本详情

获取指定版本的详细信息,包括依赖、dist 文件等。

GET https://registry.npmjs.org/{package}/{version}

参数

参数名位置必填说明
packagepath包名
versionpath版本号,如 18.2.0,或用 latest

关键返回字段

JSON Path类型说明
namestring包名
versionstring版本号
descriptionstring描述
mainstring入口文件
typesstringTypeScript 类型定义文件
dependenciesobject运行时依赖(key: 包名, value: semver)
devDependenciesobject开发依赖
peerDependenciesobject同级依赖
scriptsobjectnpm scripts
engines.nodestring要求的 Node.js 版本
engines.npmstring要求的 npm 版本
dist.tarballstring压缩包下载地址
dist.shasumstring压缩包 SHA1
dist.integritystring压缩包完整性校验
dist.unpackedSizenumber解压后大小(字节)
deprecatedstring弃用警告信息(如存在)
_npmUser.namestring发布用户用户名

3. 搜索包

搜索 npm registry 中的包,支持关键词、作者、scope 等过滤。

GET https://registry.npmjs.org/-/v1/search?text={query}&size={size}&from={from}

参数

参数名位置必填说明
textquery搜索关键词,支持 author:usernamescope:xxx
sizequery每页条数,默认 20,最大 250
fromquery偏移量,用于分页
scopequeryscope 过滤,如 @types

关键返回字段

JSON Path类型说明
objects[].package.namestring包名
objects[].package.versionstring最新版本
objects[].package.descriptionstring描述
objects[].package.keywordsarray关键词
objects[].package.author.namestring作者姓名
objects[].package.datestring发布时间(ISO 8601)
objects[].score.finalnumber综合评分(0-1)
objects[].score.detail.qualitynumber质量分
objects[].score.detail.popularitynumber流行度
objects[].score.detail.maintenancenumber维护度
totalnumber搜索结果总数
timestring请求时间

4. 获取用户包列表

获取指定 npm 用户的所有公开包。

GET https://registry.npmjs.org/-/user/{username}/packages

参数

参数名位置必填说明
usernamepathnpm 用户名(区分大小写)

关键返回字段

JSON Path类型说明
objects[].namestring包名
objects[].scopestringscope(如为私有 scope)
objects[].latest.versionstring最新版本
objects[].latest.deprecatedboolean是否已弃用

5. 获取组织用户列表

获取组织(org)下的用户列表(需组织公开或权限)。

GET https://registry.npmjs.org/-/org/{org}/user

参数

参数名位置必填说明
orgpath组织名

关键返回字段

JSON Path类型说明
users[].namestring用户名
users[].rolestring角色(owner/admin/member)

调用示例

场景 1:查询包的最新版本和依赖

用户问题:"react 包最新版本是多少,依赖什么?"

  1. 调用接口获取版本详情:
curl(url = "https://registry.npmjs.org/react/latest", X = "GET")
  1. 从返回中提取:
    • 版本:jq(".version")"18.2.0"
    • 依赖:jq(".dependencies"){ "loose-envify": "^1.1.0" }

场景 2:搜索某个作者的所有包

用户问题:"sindresorhus 有哪些 npm 包?"

  1. 搜索该作者的包:
curl(url = "https://registry.npmjs.org/-/v1/search?text=author:sindresorhus&size=20", X = "GET")
  1. objects[].package.name 中提取包名列表。

场景 3:获取用户包列表

用户问题:"查查 sindresorhus 有多少 npm 包"

  1. 调用用户包列表接口:
curl(url = "https://registry.npmjs.org/-/user/sindresorhus/packages", X = "GET")
  1. 统计返回数组长度,或使用搜索接口配合分页获取完整列表。

场景 4:比较两个包的版本

用户问题:"vue 和 react 哪个版本更新?"

  1. 分两次调用获取最新版本:
curl(url = "https://registry.npmjs.org/vue/latest", X = "GET")# 提取 .versioncurl(url = "https://registry.npmjs.org/react/latest", X = "GET")# 提取 .version
  1. 比较返回的版本号。

场景 5:访问私有包(需 Token)

用户问题:"查询 @mycompany/private-package 的信息"

  1. 使用 Authorization header 调用:
curl(url = "https://registry.npmjs.org/@mycompany%2Fprivate-package", X = "GET", H = ["Authorization: Bearer {{secrets.NPM_TOKEN}}"])
  1. 提取所需字段。

错误处理

HTTP 状态码含义应对方式
200成功正常解析响应 JSON
404包/用户不存在提示用户检查拼写,或告知"未找到指定包/用户"
401需要认证如果是私有包,请提示用户配置 NPM_TOKEN
429请求过多(Rate Limited)等待 60 秒后重试,期间不要发送新请求
500/502/503服务端错误等待 30 秒后重试,多次失败则告知服务暂时不可用
400请求参数错误检查包名格式、版本号格式是否正确

数据边界说明

  1. 弃用包deprecated 字段不为 null 时表示该版本已弃用,应提示用户谨慎使用
  2. 私有包:无权限访问时会返回 404 或 401,不代表包不存在
  3. Scope 包编码@types/react 需编码为 @types%2Freact
  4. 下载量数据:Registry 本身不提供下载量,需使用 npm API(https://api.npmjs.org/downloads/point/{period}/{package})或 npms.io 的搜索接口获取近似值
  5. README 缓存readme 字段可能为空或已缓存的旧版本,最新 README 建议从 GitHub 仓库获取
Ln 1, Col 1MarkdownSpaces: 2
No errors