duck blog
Published on

yarn berry 사용법 (yarn3)

Authors
  • avatar
    Name
    Deokgoo Kim
    Twitter

(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 입니다.

레포
▲현재 yarn repo

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)

pnp
▲ 플러그앤 플레이(게임)


그래서 프로젝트에 어떻게 적용시켜 (마이그레이션)?

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.*