npm API
이 문서는 npm Packages에 대한 API 문서입니다.
경고: 이 API는 npm package manager client에서 사용되며 수동으로 사용하도록 설계되지 않았습니다.
GitLab 패키지 레지스트리에서 npm 패키지를 업로드하고 설치하는 방법에 대한 지침은 npm package registry documentation을 참조하십시오.
참고: 이 엔드포인트는 표준 API 인증 방법을 준수하지 않습니다. 지원되는 헤더 및 토큰 유형에 대한 자세한 내용은 npm package registry documentation을 참조하십시오. 문서화되지 않은 인증 방법은 향후에 제거될 수 있습니다.
패키지 다운로드
npm 패키지를 다운로드합니다. 이 URL은 메타데이터 엔드포인트에서 제공됩니다.
GET projects/:id/packages/npm/:package_name/-/:file_name
속성 | 유형 | 필요함 | 설명 |
---|---|---|---|
id
| 문자열 | 예 | 프로젝트의 ID 또는 전체 경로 |
package_name
| 문자열 | 예 | 패키지 이름 |
file_name
| 문자열 | 예 | 패키지 파일 이름 |
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
| 문자열 | 예 | 프로젝트의 ID 또는 전체 경로 |
package_name
| 문자열 | 예 | 패키지 이름 |
versions
| 문자열 | 예 | 패키지 버전 정보 |
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 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
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| string | yes | 그룹 ID 또는 전체 그룹 경로 |
프로젝트 수준
/projects/:id/packages/npm
속성 | 유형 | 필수 | 설명 |
---|---|---|---|
id
| string | yes | 프로젝트 ID 또는 전체 프로젝트 경로 |
그룹 수준
- GitLab 16.0에서 도입됨 npm_group_level_endpoints라는 플래그로.
- GitLab 16.1에서 일반적으로 사용 가능. Feature flag
npm_group_level_endpoints
삭제됨.
/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
로 성공적으로 응답합니다.