Monolithic Repositories의 약자로, 여러 개의 프로젝트를 하나의 Repository에서 구성하는 것을 말한다. 보통은 하나의 Repository에 하나의 프로젝트를 생성하는데, 이런 구성은 Polyrepo 혹은 Multirepo라고 부른다.
npm install -g
등의 명령어를 사용해야 한다.
- yarn workspace
- Lerna
yarn init -y
or
yarn init
(package.json)
{
"name": "project-name",
"private": true, // workspaces는 배포하지 않겠다는 의미
"version": "1.0.0",
"license": "MIT",
"workspaces": [
"packages/*"
] // yarn workspace에서 관리할 패키지 경로
}
mkdir packages
디렉토리 구조
root ├ node_modules ├ packages │ ├ project1 │ │ └ package.json │ ├ project2 │ │ └ package.json │ └ project3 │ └ package.json ├ package.json └ yarn.lock
yarn workspace에서 패키지를 추가하는 경우, yarn add [패키지이름]
이 아닌 다른 방식을 사용해야 한다.
예제
project1에 패키지를 추가하고 싶은 경우
yarn workspace project1 add [패키지이름]
project1에서 패키지를 삭제하고 싶은 경우
yarn workspace project1 remove [패키지이름]
루트 디렉토리에 패키지를 추가하고 싶은 경우
yarn add [패키지이름] -W
yarn workspace project1 add react
yarn workspace project2 add react
위 명령어를 통해 project1, 2에 react를 중복으로 설치한다면 어떻게 될까?
이 경우 project1과 2 각각의 node_modules에 react 패키지가 추가되는 것이 아니라, 루트 경로의 node_modules에 추가된다.
중복(공통) 패키지는 루트 경로의 패키지로 호이스팅(상위로 끌어올려짐) 된다.
Babel 개발자가 개발한 모노레포 관리 도구이다. Lerna는 Npm, Yarn보다 한단계 위에서 프로젝트를 관리한다.
npm install -g lerna
lerna init
or
npx lerna@latest init
설치가 끝나면 packages, lerna.json, package.json이 생성된다.
- /packages: 모노레포 구조에 속하는 프로젝트가 위치하는 폴더
- lerna.json: lerna 관련 설정
- package.json: root 경로에 생성된 package.json은 여러 프로젝트 내의 공통된 node_module 의존성을 관리해준다.
(lerna.json)
{
"packages": ["packages/*"],
"version": "independent",
"npmClient": "yarn", // d
"useWorkspaces": true
}
(package.json)
{
"name": "root",
"private": true,
"devDependencies": {
"lerna": "^4.0.0"
}
}
lerna create [PACKAGE_NAME]
npm install [PACKAGE_NAME] —dev
각 패키지에 모듈을 설치하기 위해서 아래와 같이 스코프를 지정해준다.
lerna add [PACKAGE_NAME] —scope [하위프로젝트명]
모듈을 삭제하고 싶은 경우 package.json에서 해당 모듈을 제거하고
lerna bootstrap
의존성이 꼬였을 때, 모듈 clean 후 다시 설치
lerna clean
lerna bootstrap
lerna를 통한 패키지 배포
lerna publish
lerna run build
lerna run start
lerna link convert
lerna bootstrap