gloriaJun / til

Lessoned Learned
3 stars 0 forks source link

Configuration Monorepo with Lerna #87

Open gloriaJun opened 3 years ago

gloriaJun commented 3 years ago

lerna를 이용한 모노레포 개발 환경 구성하기

Version

lerna v3.22.1

Configuration Story

Installation

npm i -g lerna
lerna init

위의 명령을 실행하면 해당 프로젝트 루트 폴더를 기준으로 아래와 같이 파일이 구성된다

├── lerna.json
├── package.json
└── packages

1 directory, 2 files

lerna.json

{
  "version": "0.0.0",
  "packages": ["packages/*"],
  "npmClient": "yarn",
  "useWorkspaces": true
}

version: "independent"로 정의하면 각 패키지의 버전을 독립적으로 가져갈 수 있다.

/package.json

{
  "name": "foo",
  "private": true,
  "scripts": {
    "postinstall": "lerna bootstrap",
  },
  "devDependencies": {
    "lerna": "^3.22.1"
  },
  "workspaces": {
    "packages": [
      "packages/*"
    ]
  }
}

Create packages

<root_dir>/pakcages 하위에 각 패키지 모듈 프로젝트를 생성한다.

├── lerna.json
├── package.json
└── packages
    ├── module-1
    │   └── package.json
    └── module-2
        └── package.json

Command

lerna bootstrap

https://github.com/lerna/lerna/tree/master/commands/bootstrap 해당 명령을 수행하면 ignore 로 설정된 package 를 제외한 모든 package 의 npm install 을 실행한다. 의존이 있는 패키지는 설치 대신 Symlink를 정비 합니다.

lerna link convert

각 패키지에 설치된 모듈들이 루트로 끌어올려진다

lerna clean

https://github.com/lerna/lerna/tree/master/commands/clean 루트 경로의 node_modules를 제외하고, 각 패키지들의 node_modules을 삭제한다.

lerna create

해당 명령어를 이용하여 아래와 같이 정의된 스캐폴딩 구조를 갖춘 package를 생성할 수 있다.

❯ tree packages/foo 
packages/foo
├── README.md
├── __tests__
│   └── foo.test.js
├── lib
│   └── foo.js
└── package.json

2 directories, 4 files

lerna run script

https://github.com/lerna/lerna/tree/master/commands/run 각 패키지의 package.json에 정의된 script 를 실행합니다

lerna run start --scope=<package_name>

Install dependency module

최상위 경로에 공통으로 사용되는 모듈을 설치하고자 하는 경우에는 workspace를 지정하였으므로 아래와 같이 -W 옵션을 붙여서 설치를 해주어야 한다.

yarn add eslint prettier -D -W

최상위 경로에서 특정 패키지에 모듈을 설치하는 경우에는 scope를 지정해주어 아래와 같이 설치한다.

lerna add <module_name> --scope=<package_name>

동일 repo의 다른 package 모듈을 참조하는 경우에는 아래와 같이 추가해준다.

npx lerna add <ref_package_name> --scope=<package_name>

장단점

Good

Bad

References

lerna를 사용 중인 대표적인 프로젝트들 엿보기

gloriaJun commented 3 years ago

모듈 빌드