티스토리 뷰

728x90
반응형

보안적인 이유로 모두에게 공개할수는 없지만 회사 내부의 여러프로젝트에서 공통적으로 활용하는 npm 패키지를 만들었는데 어떻게 배포하면 좋을까요?

 

우리가 너무나도 사랑하는 npm 패키지 저장소는 public한 패키지 뿐만 아니라 private한 패키지도 저장하여 사용할 수 있습니다

 

 

기본적으로는 public 패키지는 무제한으로 사용할수 있지만,

 

private 패키지를 사용하기 위해서는 유료 플랜을 사용해야합니다

 

너무나도 고마운 npm패키지 저장소이지만, 유료가 부담이 되니 다른 방법은 무엇이 있을까요?

 

 

 

https://github.com/features/packages

 

GitHub Packages: Your packages, at home with their code

With GitHub Packages you can safely publish and consume packages within your organization or with the entire world.

github.com

 

github에서 이러한 비공개 패키지들을 호스팅 해주는 기능을 github packages 라는 이름으로 제공하고 있습니다

 

 

요금도 500MB 저장공간까지는 무료로 제공되는군요

 

아주 좋습니다 시도해봅시다

 

 

 

github에서 private repository를 생성하여, 내가 만든 private한 패키지를 만들어 푸시합니다

 

 

// index.js
module.exports = function() {
    console.log("This is private package");
    return ;
}

 

매우 간단하게 console.log를 찍는 모듈을 만듭니다

 

 

// package.json
{
  "name": "@spotlight21c/p-kkm",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "exit 0"
  },
  "author": "나를찾는아이",
  "license": "MIT",
  "repository": "https://github.com/spotlight21c/p-kkm",
  "publishConfig": {
    "registry":"https://npm.pkg.github.com"
  }
}

 

그리고 이 프로젝트에 포함할 package.json 입니다

 

가장 중요한 필드는 아래와 같습니다

 

name : "@깃헙아이디/패키지명" 이러한 이름으로 네임스페이스를 지정합니다 반드시 @ 를 포함해주세요

main : 모듈을 실행할수 있는 파일

publishConfig : 어디에 publish 할 것인지에 대한 registry 정보

 

publishConfig에 깃헙의 패키지저장소 경로를 넣으면 npm publish 할때 npm 저장소가 아닌 github의 패키지 저장소에 저장이 됩니다

 

 

자 private한 패키지는 준비를 마쳤습니다

 

이제 github 패키지 저장소에 등록을 해봅시다

 

 

 

 

먼저 github에서 Personal access tokens를 생성합니다

 

 

 

패키지를 업로드할것이기때문에 권한은 write:packages를 체크하시고 생성하면 됩니다

 

생성된 토큰을 잘 보관하세요

 

 

레지스트리에 로그인하기 위해 다음과 같이 명령어를 입력해주세요

 

@OWNER라고 표시된 부분에는 아까 사용했던 네임스페이스의 앞부분을 입력해주시면 됩니다

 

그리고 다음에 나오는 프롬프트에서 깃헙 계정명과 조금 전에 생성한 토큰을 비밀번호로 입력합니다

 

이메일주소도 입력하면 됩니다

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

> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS

 

정상적으로 입력했다면 깃헙 패키지 저장소에 로그인이 완료되었습니다

 

npm publish

 

이제 이렇게만 입력하시면 배포가 완료됩니다

 

 

 

github 레파지토리로 이동해보니 우측에 packages 라는것이 보입니다

 

클릭해보니깐 private package가 등록이 된것을 볼 수 있습니다.

 

 

 

자 이제 이 private한 패키지를 다른 프로젝트에서 사용해볼께요

 

다른 프로젝트에서 내가 만든 패키지의 이름을 이용해서 설치를 시도해볼까요

 

npm i @spotlight21c/p-kkm


npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/@spotlight21c%2fp-kkm - Not found
npm ERR! 404 
npm ERR! 404  '@spotlight21c/p-kkm@^1.0.1' is not in this registry.


이런 오류가 발생합니다

 

그렇죠 우리가 만든 패키지는 npm 패키지 저장소가 아니라 깃헙 패키지저장소에 있습니다

 

그래서 이 패키지는 npm 패키지 저장소가 아니라 github 패키지 저장소를 사용하라고 안내를 해주어야 합니다

 

.npmrc 파일을 만들어 루트디렉토리에 놓습니다

 

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

 

.npmrc 파일에 이렇게 작성해주세요

 

@spotlight21c로 시작하는 패키지에 대해서 깃헙 패키지 저장소를 사용하라고 지정합니다

 

 

그리고 다시 npm install을 해볼께요


npm ERR! code E401
npm ERR! Incorrect or missing password.
npm ERR! If you were trying to login, change your password, create an
npm ERR! authentication token or enable two-factor authentication then
npm ERR! that means you likely typed your password in incorrectly.

 

 

그렇죠, 우리가 만든 패키지는 비공개 패키지이기 때문에 이렇게 해서는 접근권한을 얻을수 없습니다

 

패키지를 깃헙 저장소에서 다운받으려면 인증정보를 추가적으로 설정해야합니다

 

personal access token을 한번더 만들어봅시다

 

패키지를 설치만할것이기 때문에 read:packages권한만 있으면 됩니다

 

 

 

.npmrc 파일에 이렇게 생성된 토큰을 다음과 같이 넣습니다

//npm.pkg.github.com/:_authToken=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
@spotlight21c:registry=https://npm.pkg.github.com/

 

자 그리고 npm install을 시도해보면 무사히 성공했습니다

 

 

private 패키지를 만들어서 깃헙 레지스트리에 저장하고, 다른 프로젝트에서 이를 활용하는것까지 해보았습니다

 

 

 

여기에 더해 github actions 을 활용해서 비공개 패키지에 코드가 푸시될때 자동으로 publish 를 한다거나 이러한 설정도 가능합니다

 

 

 

 

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함