{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com,私有化部署

{{< /details >}}

这是 npm 软件包 的 API 文档。

{{< alert type=”warning” >}}

此 API 由 npm 软件包管理器客户端 使用,并不适用于手动使用。

{{< /alert >}}

关于如何从极狐GitLab 软件包注册表上传和安装 npm 软件包的说明,请参见 npm 软件包注册表文档

{{< alert type=”note” >}}

这些端点不遵循标准的 API 身份验证方法。有关支持的标头和令牌类型的详细信息,请参见 npm 软件包注册表文档。未来可能会移除未记录的身份验证方法。

{{< /alert >}}

下载软件包

下载 npm 软件包。此 URL 由 metadata endpoint 提供。

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/my-pkg@1.3.7",
            "_nodeVersion": "12.18.4",
            "_npmVersion": "6.14.6",
            "author": {
                "name": "极狐GitLab 软件包注册表 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 或完整项目路径

群组级别

{{< history >}}

  • 引入于极狐GitLab 16.0,使用名为 npm_group_level_endpoints功能标志。默认禁用。
  • 在极狐GitLab 16.1 中 GA。功能标志 npm_group_level_endpoints 被移除。

{{< /history >}}

/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

分发标签

列出标签

列出软件包的分发标签。

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

创建或更新标签

创建或更新分发标签。

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

删除标签

删除分发标签。

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