monorepo / 여러 project 한번에 build / 어떻게 많은 repository / 거대 project
lerna 사용해 보기
시작
다음처럼 lerna 를 설치하고, init 를 하면 된다.
npm install lerna
npx lerna init
그러면 다음과 같은 directory 구조가 만들어진다. 자세한 사항은 Getting Started | Lerna 를 참고하자.
.git\
node_modules\
packages\
.gitignore
lerna.json
package.json
package-lock.json
이전 lerna에서는 lerna bootstrap
을 해줘야 했는데, 이때는 package manager들이 workspace를 지원하지 않았기 때문이라고 한다. 하지만 이제는 지원하기 때문에 이 command 는 Lerna v7 에서 사라진다고 한다.(참고)
다음 package.json
를 보면 workspaces 가 정의되어 있다.
package.json
:
{
"name": "root",
"private": true,
"workspaces": [
"packages/*"
],
"devDependencies": {
"lerna": "^6.4.1"
}
}
workspace를 visualize
npx nx graph
를 하면 workspace를 graph 로 확인할 수 있게 해준다.
Lerna commands
위 link 에서 lerna 의 모든 command 를 확인할 수 있다.
package 추가
workspace의 package를 추가 하는 방법은 npx learna create
이다.
추가하면, 다음처럼 package가 추가된다.
packages\
|
+- myproj1
|
+- myproj2
d:\lerantest>npx lerna create myproj1
lerna notice cli v6.4.1
lerna WARN ENOREMOTE No git remote found, skipping repository property
package name: (myproj1)
version: (0.0.0) 1
Invalid version: "1"
version: (0.0.0) 0.0.1
description: test-1
keywords: my module
homepage:
license: (ISC)
entry point: (lib/myproj1.js)
git repository:
About to write to d:\lerantest\packages\myproj1\package.json:
{
"name": "myproj1",
"version": "0.0.1",
"description": "test-1",
"keywords": [
"my",
"module"
],
"author": "sal <gae@mail.com>",
"homepage": "",
"license": "ISC",
"main": "lib/myproj1.js",
"directories": {
"lib": "lib",
"test": "__tests__"
},
"files": [
"lib"
],
"scripts": {
"test": "node ./__tests__/myproj1.test.js"
}
}
Is this OK? (yes)
lerna success create New package myproj1 created at ./packages\myproj1
module 추가(npm i
)
learn add
를 하면 module 를 추가할 수 있다. 이것은 npm install
과 같은 효과를 가져온다고 보면 된다. 다면, workspace안의 모든 package에 해당 module 을 install 하는 것이다.
# 모든 pacakge 에 babel-core 모듈을 추가
lerna add babel-core
내가 만든 module(여기서는 myproj1
) 을 다른 package 에 추가하려 할 때는 다음처럼 하면 된다.
# 모든 pacakge 에 myproj1 module을 추가한다. myproj1 에는 추가하지 않는다.
lerna add myproj1
# 특정 package에 내 module 을 추가하려 할 때
lerna add myproj1 --scope=myproj2
모든 project를 한번에
다음처럼 하면 packages 안에 있는 모든 project를 build, test 해준다.
npx lerna run build
npx lerna run test
특정 순서로 실행하기
특정 순서로 수행하고 싶다면 아래 command 로 설정할 수 있다. 즉, dependency 가 있는 경우 사용하면 될 듯 하다.
npx lerna add-caching
실행이 끝나면, nx.json
파일이 생성된다.
개인적인 결론
monorepo 를 위한 tool 이라고 보면 된다. 잠깐 사용해니, 이 툴은 여러개의 project를 만들어 쓰다가 그것을 하나로 모아서 쓰고 싶을 때 사용해도 될 듯 하다. lerna 에서 package를 추가할 때 git repository 로도 추가가 가능하다.
즉, 따로 분리된 repository 를 사용하다가, 이것들의 dependency 가 심하다고 하면, 그 때 lerna를 사용해도 될 듯 싶다.
댓글 없음:
댓글 쓰기