Etc

Monorepo 관리를 위한 Lerna 살펴보기

메징징 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 등 특정 스크립트를 지정하거나 특정 패키지를 지정할 수 있다.

 

그외 명령어 및 옵션 참고

https://lerna.js.org/docs/api-reference/commands