티스토리 뷰

공부일지(TIL)/Others

[yarn] 모노레포

Alledy 2022. 7. 23. 16:59

모노레포를 구축하는 도구에는 yarn, lerna, turborepo, nx, pnpm 등이 있다. 이 중에서도 yarn에 대해 알아보자.

yarn의 workspaces 필드를 사용하여 모노레포를 구성할 수 있다. yarn link를 통해 node_modules에 워크스페이스에 대한 심볼릭 링크를 생성할 수 있는데 워크스페이스는 이를 더 선언적인 방식으로 사용하는 방법이다.

// in package.json
{
    "workspaces": ["packages/*"] // packages 폴더 내에 있는 모든 폴더들을 전부 워크스페이스로 만든다. 
}

note: 워크스페이스: 패키지, 워크트리: child 워크스페이스를 갖고 있는 워크스페이스

위 예제에서 packages는 워크트리이다.

workspace ranges (workspace:)

yarn은 자동적으로 워크스페이스를 resolve하지만 만약 어떠한 경우에도 remote registry에서 가져오는 일을 피하고 싶다면 workspace: 를 사용하면 된다. 이는 v2의 피처이다. 이것을 사용하면 yarn은 무조건 local에 있는 워크스페이스만 찾아 resolve를 한다.
워크스페이스 range를 사용하는 방식에는 크게 2가지가 있다.

  1. semver 사용
  2. project 상대 경로 사용 (단 experimental 피처이므로 권하지 않음)

yarn berry의 경우

yarn berry는 yarn v2, v3를 의미한다. (v1과 구분)
기존 node modules는 의존성을 디렉토리 구조로 표현하여 설치했는데, 이렇게 되면 몇 뎁스나 되는 I/O 작업이 이루어지기 때문에 모듈을 읽을 때 느린데다가 용량이 매우 크고 hoisting 때문에 유령 의존성이 발생하는 등의 문제가 있었다. yarn berry는 이를 해결하였는데 자세한 장점은 토스 테크피드를 참고하면 좋을 것 같다.
yarn berry를 사용하면 .yarn/cache 에 zip으로 압축된 의존성 파일들이 설치되고, 이 때 node_modules처럼 디렉토리 구조로 설치되지 않고 중복 설치되지 않기 때문에 설치와 읽기가 빠르다.
의존성의 위치나 메타정보는 .pnp.cjs 파일에 정리되어 있다.

Ref

https://d2.naver.com/helloworld/7553804
https://yarnpkg.com/features/workspaces#publishing-workspaces
https://toss.tech/article/node-modules-and-yarn-berry

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함