npm API

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

이 문서는 npm Packages에 대한 API 문서입니다.

caution
이 API는 npm 패키지 관리자 클라이언트에 의해 사용되며 매뉴얼으로 사용하기 위한 것이 아닙니다.

GitLab 패키지 레지스트리에서 npm 패키지를 업로드하고 설치하는 방법에 대한 지침은 npm 패키지 레지스트리 문서를 참조하십시오.

note
이러한 엔드포인트는 표준 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": "내가 만든 패키지",
    "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 Package Registry Utility"
            },
            "description": "내가 만든 패키지",
            "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`
속성 유형 필수 설명
id string yes 그룹 ID 또는 전체 그룹 경로.

프로젝트 레벨

/projects/:id/packages/npm`
속성 유형 필수 설명
id string yes 프로젝트 ID 또는 전체 프로젝트 경로.

그룹 레벨

/groups/:id/-/packages/npm`
속성 유형 필수 설명
id string yes 그룹 ID 또는 전체 그룹 경로.

메타데이터

특정 패키지의 메타데이터를 반환합니다.

GET <라우트-접두사>/:package_name
속성 유형 필수 설명
package_name string yes 패키지의 이름.
curl --header "Authorization: Bearer <개인_액세스_토큰>" "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입니다. 인스턴스 레벨 라우트로 요청하면 반환된 URL에는 /api/v4/packages/npm이 포함됩니다.

Dist-Tags

태그 디렉터리

  • GitLab 12.7에 도입되었습니다.

패키지의 dist-tag를 나열합니다.

GET <라우트-접두사>/-/package/:package_name/dist-tags
속성 유형 필수 설명
package_name string yes 패키지의 이름.
curl --header "Authorization: Bearer <개인_액세스_토큰>" "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입니다. 인스턴스 레벨 라우트로 요청하면 반환된 URL에는 /api/v4/packages/npm이 포함됩니다.

태그 생성 또는 업데이트

  • GitLab 12.7에 도입되었습니다.

dist-tag를 생성하거나 업데이트합니다.

PUT <라우트-접두사>/-/package/:package_name/dist-tags/:tag
속성 유형 필수 설명
package_name string yes 패키지의 이름.
tag string yes 생성하거나 업데이트할 태그.
version string yes 태그가 지정된 버전.
curl --request PUT --header "Authorization: Bearer <개인_액세스_토큰>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/-/package/@myscope/my-pkg/dist-tags/stable"

이 엔드포인트는 “204 No Content”로 성공적으로 응답합니다.

태그 삭제

  • GitLab 12.7에 도입되었습니다.

dist-tag를 삭제합니다.

DELETE <라우트-접두사>/-/package/:package_name/dist-tags/:tag
속성 유형 필수 설명
package_name string yes 패키지의 이름.
tag string yes 생성하거나 업데이트할 태그.
curl --request DELETE --header "Authorization: Bearer <개인_액세스_토큰>" "https://gitlab.example.com/api/v4/projects/1/packages/npm/-/package/@myscope/my-pkg/dist-tags/stable"

이 엔드포인트는 “204 No Content”로 성공적으로 응답합니다.