Monorepo 패키지 lerna

February 16, 2019

lerna mono-repo

해당 포스트는 lerna 관련 documentation과 기타 내용들을 번역하였습니다. :)

About

큰 코드베이스를 독립적으로 버전 관리 된 패키지로 분리하면 코드 공유에 매우 유용합니다. 그러나 많은 저장소에서 변경 작업을 수행하는 것은 지저분하고 추적하기 어렵고 저장소 전체에서의 테스트는 매우 복잡합니다. 이러한 (그리고 다른 많은) 문제를 해결하기 위해 일부 프로젝트는 코드베이스를 다중 패키지 리포지토리로 구성합니다. Babel, React, Angular, Ember, Meteor, Jest와 같은 프로젝트는 단일 저장소에서 모든 패키지를 개발합니다.

Lerna는 git 및 npm을 사용하여 다중 패키지 리포지토리를 관리하는 작업 과정을 최적화하는 도구입니다.

Usage

  1. lerna 설치

    npm i -g lerna
  2. git repo 이동
  3. lerna initialize

    lerna init
  4. repository 확인

    lerna-repo/
    packages/
    package.json
    lerna.json

Commands

1) independent 각각의 모듈을 독립적으로 운영

lerna init --independent
lerna init -i

2) bootstrap 현재 lerna repo내의 패키지를 부트스트래핑함. 이 명령은 패키지가 이미 존재하고 node modules 폴더에서 사용할 수있는 것처럼 require ()에서 패키지 이름을 사용할 수있게하므로 매우 중요합니다.

lerna bootstrap

common devDependencies 대부분의 devDependencies는 lerna link convert를 사용하여 Lerna repo의 루트까지 끌어 올 수 있습니다. 위의 명령은 자동으로 dependency를 끌어 올리며 상대적인 파일 지정자를 사용합니다.

Hoisting은 몇가지 이점이 있습니다.

  • 모든 패키지는 주어진 종속성의 동일한 버전을 사용합니다.
  • GreenKeeper와 같은 자동화 된 도구를 사용하여 루트의 종속성을 최신 상태로 유지할 수 있습니다.
  • 종속성 설치 시간이 줄어 듭니다.
  • 저장 공간이 덜 필요합니다.

npm 스크립트가 사용하는 "바이너리"실행 파일을 제공하는 devDependencies는 여전히 사용되는 각 패키지에 직접 설치해야합니다.

예를 들어 lerna run nsp (그리고 npm이 패키지의 디렉토리 내에서 nsp를 실행)가 올바르게 작동하려면이 경우 nsp 종속성이 필요합니다.

{
  "scripts": {
    "nsp": "nsp"
  },
  "devDependencies": {
    "nsp": "^2.3.3"
  }
}

References

...