-
Monorepo 관리를 위한 Lerna 살펴보기Etc 2024. 2. 7. 10:56반응형
Lerna란?
Lerna란 JavaScript를 위한 Monorepo의 구성과 관리를 도와주는 툴.
npm 기반으로 패키지의 버전관리, 배포, 모듈 종속성 관리 등을 할 수 있으며, 작성일 기준으로 7.4.2 버전까지 출시되었다.
- 각 기능에 대해서는 아래 Lerna 주요 명령어에서 정리.
- Lerna v5부터는 빌드 툴인 오픈소스 빌드 시스템인 nx가 도입되어 스크립트 병렬 실행, 캐싱 작업을 추가적으로 지원하고 있다.
Lerna 적용 방법
기존 혹은 새 프로젝트에서 아래와 같이 init 명령어를 통해 Lerna를 적용한다.
$npx lerna init
init 명령어 실행시 lerna를 사용하기 위한 설정 파일(lerna.json)과 npm 설정 파일들이 생성된다.
기존 프로젝트에 적용한다면 존재하는 패키지 파일들을 --package옵션으로 함께 정의해야 적용할 수 있다.
# Passing a single pattern npx lerna init --packages="packages/*" # Passing multiple patterns npx lerna init --packages="foo/*" --packages="bar/*"
lerna.json
lerna.json 파일은 lerna를 설정하기 위한 파일로 버전, 사용할 패키지 관리자등을 설정할 수 있다.
{ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "version": "0.0.0", "packages": [ "packages/*" ] }
- lerna는 기본적으로 npm기반으로 되어 있으나, yarn과 같이 다른 패키지 관리자를 사용하고 싶을 경우 npmClient 옵션을 추가하여 설정할 수 있다.
- 변경 사항을 관리할 수 있는 change log를 자동으로 생성해주는데 자세한 설정 방법은 아래 링크를 참고한다. https://github.com/lerna/lerna-changelog
Lerna 주요 명령어
publish
npm publish처럼 패키지를 배포하는 것은 동일하나, lerna는 모든 패키지를 한번에 배포할 수 있다.
- package.json에 “private”이 활성화된 패키지는 게시하지않는다. (npm publish와 동일)
bootstrap
각 패키지에 종속된 node module을 설치하고 중복되는 모듈을 정리하고 연결한다.
- node module을 설치하고 관리하는 것은 패키지 관리자의 workspaces로 정의하는 것이 더 적합하다는 이유로 lerna v7부터 제거되었다.
run
https://lerna.js.org/docs/features/run-tasks
각 패키지의 packgage.json에 정의된 스크립트를 실행한다.
아무런 옵션없이 실행하면 각 패키지의 모든 스크립트를 실행하며, lerna run test, lerna run test --scope=header 등 특정 스크립트를 지정하거나 특정 패키지를 지정할 수 있다.
그외 명령어 및 옵션 참고
'Etc' 카테고리의 다른 글
2021 - 2023 회고 및 2024 목표 (2) 2024.01.19 [Mac] 이클립스를 하나 더 실행하는 방법 (0) 2020.11.09