728x90
monorepo 환경에서 사용하기 좋다.
polyrepo로 구성할 경우 프로젝트간 공용 컴포넌트에 대한 코드가 중복으로 늘어난다.
UI, 기능이 같은 컴포넌트를 하나의 repository에서 구성하고 싶은 경우 Monorepo로 구성하는 것이 이득이다.
Private npm
일반 npm package는 public npm에서 제공하는 package를 install에서 사용하는 구조이다.
만약 package를 private하게 관리해야 한다면 외부로 노출되지 않도록 npm registry를 구성해야한다.
회사 사내에서 재사용할 수 있는 모듈을 패키지화해서 공유하기 위해 private npm을 사용한다.
private npm 서비스의 종류로는 Verdaccio, Gihub packages, npm pro 등이 있다.
우리 회사는 node package의 버전 관리 용이성을위해 사용한다.
app1은 private npm의 package@0.1.0을 보는데 app2는 privatge npm의 package@0.1.1을 볼수있도록 설정.
Verdaccio vs Github Packages
Github Packages
- github action 연동 가능. webhook 지원. => publishing 할때 혹은 publishing 이후 workflow customize 가능하다.
- microsoft가 지원하기 때문에 유지보수가 계속된다.
Verdaccio
https://www.devh.kr/2020/Host-Publish-and-Manage-Private-npm-Packages-with/
- verdaccio 설치
- verdaccio 실행
- verdaccio 사용자 등록
- package 업데이트 정보 있을 시 npm publish
Best Practice
- public package와 private package 네이밍 구분
- 다음의 경우 @my-company/ 와 local- prefix를 가지는 package는 priavate package 이다.
packages:
'@my-company/*':
access: $authenticated // import packages할때 authenticated 되어야한다.
publish: $authenticated
'local-*':
access: $all
publish: $authenticated
'@*/*':
access: $all
publish: $authenticated
'**':
access: $all
publish: $authenticated
- private repository -> public repository(uplink) -> cache 순서로 보기때문에 이를 이용한다.
- 만약 public repository package가 마음에 안든다면 같은 이름으로 override한다.
- private package의 proxy설정을 해제한다. npmjs.org에서 가져오지 않게하기 위함이다.
Verdaccio + Docker
verdaccio private repository 자체를 docker image로 생성하여 어느 서버에서도 띄울 수 있도록 할 수 있다.
docker pull verdaccio/verdaccio:4
docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio
Verdaccio + Environment Variables
verdaccio는 permission이나 port 수정을 위해 환경변수를 사용한다.