티스토리 뷰
모노레포를 구축하는 도구에는 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가지가 있다.
- semver 사용
- 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
'공부일지(TIL) > Others' 카테고리의 다른 글
[Github] credential.helper osxkeychain 삭제하기 (0) | 2022.10.12 |
---|---|
[Git] Ref (0) | 2022.07.14 |
[Git] Detached HEAD (0) | 2022.07.14 |
정리 및 작성할 수도 있는 주제들 (0) | 2021.09.09 |
[Google Analytics] Flutter 플러그인으로 ecommerce 이벤트 보낼 때 생긴 일 (0) | 2021.09.07 |
- Total
- Today
- Yesterday
- useEffect
- 제네릭스
- 개발 공부
- Session
- JavaScript
- c언어
- Java
- this
- youtube data api
- package.json
- react
- SQL
- Data Structure
- linkedlist
- 인스턴스
- Conflict
- jQuery
- 포인터 변수
- CSS
- 알고리즘
- til
- GIT
- 리덕스
- 자바
- Redux
- rxjs
- 깃
- Prefix Sums
- oracle
- getter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |