yarn berry란?
기존의 npm과 yarn v1에서 비효율적이었던 패키지 관련 약점들을 보완하고 PnP기반을 통해 대폭적으로 효율성을 상승시킨 새로운 패키지 도구이다.
왜 적용할 생각 했는지?
새로운 next, nest 프로젝트에서 배포 CI를 진행할 때 install시 너무 많은 시간을 잡아 먹었기 때문에 그 시간을 줄여보고자 도입하게 되었다.
기존 node_modules 문제점
node_moduels의 경우 각각의 패키지들이 또다시 node_moduels를 가지고 있기 때문에 파일의 크기 자체도 커지지만 해당 node_moduels에서 패키지를 찾기위해 순회할때 디렉토리를 차례로 돌며 해당 패키지의 node_modules를 또 탐색하는 식으로 깊이탐색을 한다. 그래서 파일을 참조하기 위한 시간도 꽤 오래 걸린다.
Pnp란?
기존처럼 node_moduels를 설치하지 않고 각각의 모듈에 대한 패키지 zip파일만 가지고 종속성을 처리한다.
사용 방법
1. 현재 프로젝트에서 yarn set version berry명령어 입력
2. pnp모드 사용 시 .yarnrc.yml 파일에 nodeLinker: pnp를 추가해준다.
3. gitignore를 수정해준다.
폴더 설명
- .yarn/cache -> zip파일로 된 패키지들을 저장한다. (프로젝트 클론 시 다시 다운 받지 않기 위해 항상 커밋)
- .yarn/release -> yarn의 해당 버전 릴리즈 파일 (플젝 구성원들의 yarn 버전을 맞추기 위해 항상 커밋)
- .pnp.* -> pnp모드를 사용할 때 node_modules가 없는 대신 해당 파일이 .yarn/cache에서 필요한 패키지를 찾아준다. (pnp모드 시 커밋 필요)
- .yarn/unplugged -> 패키지 zip파일을 플러그인 하면 나오는 파일들
pnp 모드
- strict 모드 -> pnp 기본모드이며 해당 패키지의 dependency에 명시 되지 않은 종속성 파일들은 접근을 못하게 한다.
- loose 모드 -> pnp linker가 종속성을 기억하고 있어서 dependency에 명시 되지 않아도 접근할 수 있게 해준다.
만약 pnp모드를 안쓴다면?
기존처럼 node_moduels를 만들어 사용한다. 하지만 기존 npm이나 yarn v1은 install시 원격 서버에서 패키지를 다운받지만 yarn berry에서는 이미 .yarn/cache에 패키지들을 유지하고 있기 때문에 node_moduels를 구성하는 시간이 빨라진다.
'프론트엔드' 카테고리의 다른 글
(파일시스템) Blob, Base64, arrayBuffer, Buffer (0) | 2023.09.10 |
---|---|
(모듈시스템)CJS와 ESM (0) | 2023.08.11 |
(프론트엔드) Refresh토큰과 Access토큰 인증처리 (0) | 2023.06.11 |
OpenApi-Generator (0) | 2022.08.07 |
SSR(Server Side Rendering) (0) | 2021.09.26 |