- Published on
yarn berry 사용법 (yarn3)
- Authors

avatar - Name
- Deokgoo Kim
(2022. 04. 13. 업데이트)
yarn berry로 유입될 것이라고 생각했던 예상과 다르게 yarn3로 유입되는 경우가 많아
내용들을 업데이트하였습니다.
yarn의 버전
yarn version 3, yarn2, yarn berry 은 같은 표현입니다?!
현재 yarn은 버전이 3.x이며 사람들이 yarn1 이후 메이저 버전으로 yarn2로 불려지며 berry는 코드이름이라고 합니다.
yarn berry라는 것은 v.2 이상의 버전이라고 생각하시면 될 것 같습니다.

yarn berry란?
yarn berry는 yarn 패키지 매니저의 2번째 버전으로 2018년 9월 yarn의 RFC 저장소에서(yarnpkg/rfcs) 시작되었다고 합니다.
Javascript로 만들어져 있던 yarn을 berry에서는 Typescript로 만들었으며
Yarn v1의 주요 개발자인 Mael Nison이 개발하셨고, 2020년 1월 25일부터 정식 버전(v2)이 출시되었습니다.
yarn github 페이지에서는 더 이상 yarn의 유지보수는 이루어지지 않는다고 합니다. 작성 당시 berry의 latest 버전은 3.1.1 입니다.

NPM 문제점
먼저 yarn berry의 등장 이유를 알아야 합니다.
- 비효율적인 의존성 목록 검색
- 중복제거를 못함
- 최적화 하려다 유령 의존성(Phantom dependencies) 발생
(https://academy.realm.io/posts/mobilization-konstantin-raev-taming-node-modules-at-facebook/)
yarn berry 기능
Plug n Play 라는 개념을 사용하여 기존 문제점을 해결합니다. pnp는 버전, 위치, 의존성 등을 담고 있습니다. node_modules를 생성하지 않고 기본 캐시 폴더에 zip 파일로 저장해서 경로를 .pnp.js에 명시합니다.
- pnp가 제공하는 자료구조를 이용하여 위치를 찾습니다.
- 패키지 중복설치가 되지 않습니다.
- zero-install을 사용하면 라이브러리 설치 없이 사용 가능합니다.
Yarn Berry에서 의존성을 버전 관리에 포함하는 것을 Zero-Install이라고 하며, 용량과 파일의 숫자가 적기 때문에 의존성을 git으로 관리 가능합니다. (https://yarnpkg.com/features/zero-installs)

그래서 프로젝트에 어떻게 적용시켜 (마이그레이션)?
yarn berry로 변경
먼저 yarn의 버전을 변경해야 합니다. 버전을 확인하면 3.x로 확인할 수 있을 것입니다.
yarn set version berry
yarn --version
버전이 변경되면 .yarnrc.yml, .yarn 이 생성되는 걸 볼 수 있습니다.
.yarnrc에서는 pnpMode, yarnPath, cacheFolder 등을 설정할 수 있습니다..yarn에서는 cache folder에 의존성 정보를 저장하며, releases
install
package를 설치하고 .pnp.cjs에 의존성을 찾을 수 있는 정보가 저장됩니다.
yarn
실행
PnP가 환경에 올바르게 주입 ( require() overwrite )
yarn node
참고: (https://yarnpkg.com/cli/node)
ETC
.gitignore에 추가해야할 것들
### yarn ###
# used Zero-Install
.yarn/*
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions
# unused Zero-Install
.yarn/*
!.yarn/patches
!.yarn/releases
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
.pnp.*
댓글
새 글 알림 받기
실무에서 바로 써먹을 수 있는 개발 팁과 경험담을 받아보세요
개인정보는 뉴스레터 발송 목적으로만 사용되며, 언제든 구독을 해지할 수 있습니다.