개발/Node & Javascript

Lerna, Yarn workspace를 사용해보자.

말고기 2021. 4. 11. 17:33
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의 기능을 활용해서 의존성 관리하게 되면 장점이 존재한다.

  1. native 기능으로 디펜던시 관리를 하기 때문에 중복된 모듈을 한 곳에 모아서 관리할 수 있게 된다.
  2. shared module에 대한 참조가 쉬워진다.

2. workspace publish 관리는 lerna를 통해서 하자.

lerna의 경우 pacakge들에 대한 publish관리 및 tag 관리까지 편하게 할 수 있는 기능들을 제공한다. 이를 통해서 관리하게 되면 편리함을 누릴 수 있다.

출처

728x90
반응형