자몽이 조아

github repo를 github 패키지 저장소에 연결하여 npm 패키지 publish 하기 ~ 패키지 다운받아서 레포의 파일들 받기 본문

카테고리 없음

github repo를 github 패키지 저장소에 연결하여 npm 패키지 publish 하기 ~ 패키지 다운받아서 레포의 파일들 받기

Grapefruitgreentealoe 2023. 2. 3. 17:26
반응형

이 글은 https://docs.github.com/ko/packages/working-with-a-github-packages-registry/working-with-the-npm-registry 를 번역한 글입니다

 

npm 레지스트리 작업 - GitHub Docs

Authenticating to GitHub Packages You need an access token to publish, install, and delete private, internal, and public packages. You can use a personal access token (classic) to authenticate to GitHub Packages or the GitHub API. When you create a persona

docs.github.com

**레지스트리란?

패키지 보관 공간

 

깃허브 패키지 인증방법

public ,internal ,private 패키지를 publish 하고 , 저장하고  삭제하기위해 access token이 필요하다.

personal access token(classic) 을 깃허브 패키지나 깃허브 api를 인증하기 위해 사용할 수 있다.

personal access tocken을 만들때, 필요에따라 다른 스코프를 토큰에 할당할 수 있다.

 

깃허브 액션 워크플로우 내에서 깃허브 패키지 레지스트리를 인증하기위해서는:

- 워크플로우 레포지토리에 연관된 패키지를 publish하기위한 GITHUB_TOKEN을 이용할 수 있다.

- 적어도 read:packages 스코프의 personal access token(classic )가 있어야 다른 private 레포지토리에 연관된 패키지를 설치할 수 있다.

 

 

깃허브 액션 워크플로우 안에서 인증하기

반드시 personal access token(classic)을 사용하여 publish, install 하는  scope를 추가해야한다.

.npmrc 파일에 개인 access token(classic)을 넣거나 command line에서 npm에 username과 personal access token으로 로그인하여 인증할 수 있다.

 

.npmrc file에 personal access token을 추가하여 인증할 수 잇다.

//npm.pkg.github.com/:_authToken=TOKEN

TOKEN 부분을 personal access token으로 교체하면 된다.

npm 을 통해 인증할 경우, USERNAME을 깃허브 유저네임으로 바꾸고 TOKEN을 personal access token(classi)으로 바꾸고 

PUBLIC-EMAIL-ADDRESS를 이메일 주소로 바꾸면 된다.

 

$ npm login --scope=@OWNER --auth-type=legacy --registry=https://npm.pkg.github.com

> Username: USERNAME
> Password: TOKEN

 

package Publish 하기

깃허브 패키지는 npm package를 조직이나 개인 계정에 따라서 저장하고 레포지토리와 패키지를 연동하게 해준다.

레포지토리로부터 권한을 따올지, 레포지토리와 별개로 권한을 설정할지를 선택할 수 있다.

패키지를 처음 publish할때, 기본값은 private이다. package가 레포지토리에 링크되어있으면, 기본값은 레포의 가시성을 따라간다.

가시성이나 접근 권한 설정을 바꾸기 위해서는 여길보슈 

 

Configuring a package's access control and visibility - GitHub Docs

Packages with granular permissions are scoped to a personal user or organization account. You can change the access control and visibility of a package separately from the repository that it is connected (or linked) to. Some registries only support reposit

docs.github.com

레포지토리와 publish한 packge를 연결하는 정보는 여기있다

기본적으로 깃허브 패키지는 package.json 파일의 이름 필드에 명시한 깃허브 레포 안에 package를 publish한다.

npm v8.5.3이후인 경우  README.md 파일에 package 디렉토리를 포함시켜 package listing page를 만들 수 있다.

->Working with package.json How to create Node.js Modules 를 참고하자

 

package.json 파일에 url field를 포함하여 같은 github repository에 여러개의 packages를 publish할 수 있다.

->Publishing multiple packages to the same repository

 

 프로젝트에 있는 .npmrc 파일이나 package.json에 있는 publishConfig 옵션을 이용하여 프로젝트를 매핑하는 스코프를 설정할 수 있다.

Github packages는 오직 scoped된 npm packges만을 지원한다.

Scoped된 packge들은 @owner/name  의 포맷으로 이름을 갖고있다.

Scoped된 패키지들은 보통 @ 심볼로 시작한다.  scopeded name을 이용하기 위해서는 package.json에 있는 이름을 바꿔야한다.

-> 예시 : "name": "@codertocat/hello-world-npm"

 

 

 

 

 

 

 

 

Publish 하는 방법

 

local에 있는 .npmrc파일을 이용한 package Publishing

.npmrc파일에서는 Github packages url과 계정 주인을 통해 깃허브 Packages가 package 요청을 어디에 라우트할지를 알게 된다.

.npmrc파일을 이용하여 다른 개발자들이 Github Package가 아닌 npmjs.org에 publish하는 것을 막게된다.

 

1. Github packages에 인증을 한다.

2. package.json파일이 있는 같은 디렉토리 안에서 .npmrc파일을 만들거나 수정하여 Github Packages URL와 계정주인을 명시한다. 

 

@OWNER:registry=https://npm.pkg.github.com

 

-> @OWNER를 조직이나 유저이름으로 바꾼다

 

3. GitHub Packages가 프로젝트 내에서 찾을 수 있도록 .npmrc 파일을 레포지토리에 넣는다.  Adding a file to a repository  

4. 프로젝트의 package.json에 package의 이름을 확인한다. name 필드는 scope와 package의 이름이 포함되어있어야한다.

예를 들어 패키지 이름이 test이고 My-org 조직에 publish한다면 이름필드에 @my-org/test 가 들어가야한다.

5. package.json안의 repository 필드를 확인한다. repository 필드는 Github repository의  url과 맞아야한다.

예를들어 repository 이 github.com/my-org/test이면 repositry 필드에 https://github.com/my-org/test.git 가 들어가야한다.

6. 패키지를 publish한다.

$ npm publish

 

package.json파일의 publishConfig를 이용한 package Publishing

publishConfig를 이용하여 package가 publish 되는 registry를 지정할 수 있다. ->https://docs.npmjs.com/cli/v9/configuring-npm/package-json

1. 패키지의 package.json파일을 수정한다.

"publishConfig": {
  "registry": "https://npm.pkg.github.com"
},

 

2. package.json의  repository 필드를 확인하여 url이 맞는지 확인한다.

3.

$ npm publish

 

같은 레포안에 여러개의 package Publish하기

각 패키지의 repository 필드에  깃허브 레포지토리의 url 을 포함하면 된다.

 

"repository":"https://github.com/OWNER/REPOSITORY",

 

 

Package 설치하기

package.json에 dependencies에 추가함으로서 패키지를 설치할 수 있다. ->https://docs.npmjs.com/creating-a-package-json-file     

기본적으로 package를 한 조직에서 추가할 수 있다. 

또한 프로젝트 안에 .npmrc 파일을 추가함으로 패키지를 설치하는 모든 요청은 Github Packages를 통해 갈 것이다.

모든 패키지 요청을 github packages를 통해 라우트할 때, npmjs.org로부터  scoped, unscoped된 패키지를 이용할 수 있다.

-> 참고 : https://docs.npmjs.com/cli/v9/using-npm/scope

 

1. github packages에 인증한다.

2. package.json이 있는 같은 디렉토리에서 .npmrc파일 아래 코드를 넣는다

 

@OWNER:registry=https://npm.pkg.github.com

 

3.  .npmrc 파일을 github packages가 프로젝트를 찾을 수 있는 곳에 넣는다. Adding a file to a repository   

4. 프로젝트 안에서 package.json 안에 설치할 package를 dependencies에 넣는다.

{
  "name": "@my-org/server",
  "version": "1.0.0",
  "description": "Server app that uses the <organization_name>/<package_name> package",
  "main": "index.js",
  "author": "",
  "license": "MIT",
  "dependencies": {
    "<organization_name>/<package_name>": "1.0.0"
  }
}
반응형
Comments