Lerna, Yarn workspace를 사용해보자.
2021. 4. 11. 17:33ㆍ개발/Node & Javascript
728x90
반응형
개요
- 기존에 있었던 repo를 확장할 일이 생겼다.
- 이에 따라 자료 조사를 하던 중 Lerna를 알게 되었고, 이를 활용하여 구축 및 활용해보자.
Lerna란?
Lerna 공식 github를 보면 multiple project를 관리하기 위한 tool이라고 설명되어 있다.
- multiple packages를 하나의 repo에서 관리하기 위한 기능들을 제공한다.
- hoist를 통해서 공통으로 사용하는 패키지들을 한데 모아서 관리할 수 있게 도와준다. (이 부분은 추후에 설명하겠지만 yarn의 workspace를 활용하려고 한다.)
Basic commands
1. bootstrap
현재 repo에 있는 모든 package들을 bootstraping한다. dependency와 link를 모두 install한다.
여러가지 옵션일 지정할 수 있는데, 해당 부분은 lerna.json
관련 documentation을 참조하면 좋다.
아래는 설정한 예제이다.
{
"npmClient": "yarn", // install시에 사용할 package manager를 선택할 수 있다.
"packages": [ // package의 scope을 지정할 수 있다.
"packages/*"
],
"version": "0.0.0", // 만약 package에 version이 따로 명시되어 있지 않다면 해당 version을 참조한다.
"useWorkspaces": true // yarn의 workspace 기능을 사용하는지 참조한다.
}
lerna bootstrap
2. publish
현재 있는 package들을 publish할 수 있게 해준다.
canary release도 지원한다.
아래는 설정한 예제이다.
//package.json
{
"scripts": {
"publish": "lerna publish", // push
"publish:canary": "lerna publish --canary" // canary 배포를 지원한다.
},
"workspaces": [
"packages/*" // yarn에서 관리하는 workspace에 대한 path를 정의한다.
]
}
이렇게 설정 후 아래의 script를 실행할 경우 package를 publish해주고, tag까지 설정해주는 것을 알 수 있다.
yarn run publish
Yarn workspace란?
- Yarn에서 신규로 workspace라는 기능을 제공 한다.
- 이를 통해서 monorepo에서 여러 패키지들의 의존성을 관리할 수 있게 도와준다.
Basic commands
1. module 레벨 명령어들
기존과 동일하게 모듈을 설치하거나 삭제할 수 있다.
모듈 레벨에서 동작할 수 있게 설정 가능하다.
앞에 workspace ${MY_MODULE_NAME}이 추가되는 것 외에는 차이점이 없다.
yarn workspace ${MY_MODULE_NAME} add ${PACKAGE_NAME} --dev
yarn workspace ${MY_MODULE_NAME} remove ${PACKAGE_NAME}
yarn worksapce ${MY_MODULE_NAME} build
2. workspace 레벨 명령어들
workspace ~~를 제거하면 모든 모듈에서 동작한다.
yarn test
그렇다면 어떻게 관리하면 좋을까?
1. 패키지 의존성 관리는 yarn workspace를 통해서하자
아래의 블로그를 보면 확인할 수 있듯이 yarn의 workspace의 기능을 활용해서 의존성 관리하게 되면 장점이 존재한다.
- native 기능으로 디펜던시 관리를 하기 때문에 중복된 모듈을 한 곳에 모아서 관리할 수 있게 된다.
- shared module에 대한 참조가 쉬워진다.
2. workspace publish 관리는 lerna를 통해서 하자.
lerna의 경우 pacakge들에 대한 publish관리 및 tag 관리까지 편하게 할 수 있는 기능들을 제공한다. 이를 통해서 관리하게 되면 편리함을 누릴 수 있다.
출처
728x90
반응형
'개발 > Node & Javascript' 카테고리의 다른 글
Nest.js - Typescript alias를 사용해보자 (1) | 2021.10.17 |
---|---|
Clinic.js를 사용해보자 (2) | 2021.05.01 |
RxJS - 공부 환경 셋업 (1) | 2021.03.01 |
Nest.js - query param validation이 잘 안될 때 (5) | 2021.02.20 |
Nest.js 탐험기 - logging을 winston과 함께 사용해보자. (4) | 2021.02.12 |