Help us learn about your current experience with the documentation. Take the survey.
npm API
- 版本:Free, Premium, Ultimate
- 产品形态:GitLab.com, GitLab Self-Managed, GitLab Dedicated
这是 npm Packages 的 API 文档。
此 API 供 npm 包管理器客户端 使用,不适用于手动操作。
有关如何从 GitLab 包仓库上传和安装 npm 包的说明,请参阅 npm 包仓库文档。
这些端点不遵循标准的 API 身份验证方法。 有关支持的请求头和令牌类型的详细信息,请参阅 npm 包仓库文档。 未记录的身份验证方法将来可能会被移除。
下载包
下载 npm 包。此 URL 由 元数据端点 提供。
GET projects/:id/packages/npm/:package_name/-/:file_name| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
id |
string | yes | 项目 ID 或完整路径。 |
package_name |
string | yes | 包的名称。 |
file_name |
string | yes | 包文件的名称。 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/@myscope/my-pkg/-/@my-scope/my-pkg-0.0.1.tgz"将输出写入文件:
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/@myscope/my-pkg/-/@my-scope/my-pkg-0.0.1.tgz" >> @myscope/my-pkg-0.0.1.tgz这会将下载的文件写入当前目录下的 @myscope/my-pkg-0.0.1.tgz 文件中。
上传包文件
上传一个包。
PUT projects/:id/packages/npm/:package_name| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
id |
string | yes | 项目 ID 或完整路径。 |
package_name |
string | yes | 包的名称。 |
versions |
string | yes | 包版本信息。 |
curl --request PUT
--header "Content-Type: application/json"
--data @./path/to/metadata/file.json
--header "Authorization: Bearer <personal_access_token>" \
"https://gitlab.example.com/api/v4/projects/1/packages/npm/@myscope%2fmy-pkg"元数据文件内容由 npm 生成,内容大致如下:
{
"_attachments": {
"@myscope/my-pkg-1.3.7.tgz": {
"content_type": "application/octet-stream",
"data": "H4sIAAAAAAAAE+1TQUvDMBjdeb/iI4edZEldV2dPwhARPIjiyXlI26zN1iYhSeeK7L+bNJtednMg4l4OKe+9PF7DF0XzNS0ZVmEfr4wUgxODEJLEMRzjPRJyCYPJNCFRlCTE+dzH1PvJqYscQ2ss1a7KT3PCv8DX/kfwMQRAgjYMpYBuIoIzKtwy6MILG6YNl8Jr0XgyvgpswUyuubJ75TGMDuSaUcsKyDooa1C6De6G8t7GRcG2br4CGxKME3wDR1hmrLexvJKwQLdaS52CkOAFMIrlfMlZsUAwGgHbcgsRcid3fdqade9SFz7u9a1naGsrqX3gHbcPNINDyydWcmN1By+W19x2oU7NcyZMfwn3z/PAqTaruanmUix5+V3UXVKq9yEoRZW1yqQYl9zWNBvnssFUcbyJsdJyxXJrcHQdz8gsTg6PzGChGty3H+6Gvz0BZ5xxxn/FJ1EDRNIACAAA",
"length": 354
}
},
"_id": "@myscope/my-pkg",
"description": "Package created by me",
"dist-tags": {
"latest": "1.3.7"
},
"name": "@myscope/my-pkg",
"readme": "ERROR: No README data found!",
"versions": {
"1.3.7": {
"_id": "@myscope/[email protected]",
"_nodeVersion": "12.18.4",
"_npmVersion": "6.14.6",
"author": {
"name": "GitLab package registry Utility"
},
"description": "Package created by me",
"dist": {
"integrity": "sha512-loy16p+Dtw2S43lBmD3Nye+t+Vwv7Tbhv143UN2mwcjaHJyBfGZdNCTXnma3gJCUSE/AR4FPGWEyCOOTJ+ev9g==",
"shasum": "4a9dbd94ca6093feda03d909f3d7e6bd89d9d4bf",
"tarball": "https://gitlab.example.com/api/v4/projects/1/packages/npm/@myscope/my-pkg/-/@myscope/my-pkg-1.3.7.tgz"
},
"keywords": [],
"license": "ISC",
"main": "index.js",
"name": "@myscope/my-pkg",
"publishConfig": {
"@myscope:registry": "https://gitlab.example.com/api/v4/projects/1/packages/npm"
},
"readme": "ERROR: No README data found!",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"version": "1.3.7"
}
}
}路由前缀
对于其余的路由,有两组相同的路由,它们分别在不同的作用域内发起请求:
- 使用实例级前缀在整个实例的作用域内发起请求。
- 使用项目级前缀在单个项目的作用域内发起请求。
- 使用群组级前缀在群组的作用域内发起请求。
本文档中的所有示例均使用项目级前缀。
实例级
/packages/npm项目级
/projects/:id/packages/npm| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
id |
string | yes | 项目 ID 或完整项目路径。 |
群组级
/groups/:id/-/packages/npm| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
id |
string | yes | 群组 ID 或完整群组路径。 |
元数据
返回指定包的元数据。
GET <route-prefix>/:package_name| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
package_name |
string | yes | 包的名称。 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/@myscope/my-pkg"响应示例:
{
"name": "@myscope/my-pkg",
"versions": {
"0.0.2": {
"name": "@myscope/my-pkg",
"version": "0.0.1",
"dist": {
"shasum": "93abb605b1110c0e3cca0a5b805e5cb01ac4ca9b",
"tarball": "https://gitlab.example.com/api/v4/projects/1/packages/npm/@myscope/my-pkg/-/@myscope/my-pkg-0.0.1.tgz"
}
}
},
"dist-tags": {
"latest": "0.0.1"
}
}响应中的 URL 与用于请求它们的路由前缀相同。如果您使用实例级路由请求它们,则返回的 URL 将包含 /api/v4/packages/npm。
Dist-Tags
列出标签
列出包的 dist-tags。
GET <route-prefix>/-/package/:package_name/dist-tags| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
package_name |
string | yes | 包的名称。 |
curl --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/-/package/@myscope/my-pkg/dist-tags"响应示例:
{
"latest": "2.1.1",
"stable": "1.0.0"
}响应中的 URL 与用于请求它们的路由前缀相同。如果您使用实例级路由请求它们,则返回的 URL 将包含 /api/v4/packages/npm。
创建或更新标签
创建或更新 dist-tag。
PUT <route-prefix>/-/package/:package_name/dist-tags/:tag| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
package_name |
string | yes | 包的名称。 |
tag |
string | yes | 要创建或更新的标签。 |
version |
string | yes | 要打标签的版本。 |
curl --request PUT --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/-/package/@myscope/my-pkg/dist-tags/stable"此端点成功响应时会返回 204 No Content。
删除标签
删除 dist-tag。
DELETE <route-prefix>/-/package/:package_name/dist-tags/:tag| 属性 | 类型 | 是否必需 | 描述 |
|---|---|---|---|
package_name |
string | yes | 包的名称。 |
tag |
string | yes | 要创建或更新的标签。 |
curl --request DELETE --header "Authorization: Bearer <personal_access_token>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/-/package/@myscope/my-pkg/dist-tags/stable"此端点成功响应时会返回 204 No Content。