본문 바로가기

🔥 🔥

yarn berry

반응형

기존 프로젝트에서 사용하던 npm과 yarn1의 단점

 

  • npm
    • 비효율적인 의존성 탐색
    • lock 파일이 없어서 생기는 의존성 이슈 문제 (npm도 추후에 npm5 버전 업데이트 이후로 package-lock.json을 생성하여 패키지 잠금을 지원하게 되었다.)
    • 보안이슈
    • 패키지가 늘어날수록 성능저하 발생

 

  • 위 문제 해결을 위해 facebook을 중심으로 google 등 회사들이 npm의 문제를 해결하기 위해 새로운 패키지 매니저인 yarn을 발표하였다.

 

  • yarn
    •  
    • 왼쪽이 npm, 오른쪽이 yarn 방식이다.
    • 다운받은 패키지 데이터를 cache에 저장하여 중복된 데이터는 설치하지 않고, 캐시에 저장된 파일을 활용함으로써 패키지 설치 속도가 빠르다는 장점이있다.
    • 유령 의존성(Phantom dependencies) : 직접 의존하지 않은 패키지를 암묵적으로 참조할 수있게 된다. 그러면 다른 의존성 파일을 지웠을때 암묵적으로 참조했던 패키지도 삭제되기 때문에 문제가 생길 수 있다.

 

 

  • +) 추가 npm 과 yarn의 단점
    • 보통 프로젝트 진행시, node_modules은 용량이 커서 gitignore에 포함하여 github에는 올리지 않을 것이다. 이 때문에 협업시 git pull 하여 작업을 이어하게 되면 매번 npm 또는 yarn 명령어를 사용하여 node_modules 파일을 재설치해야하는 번거로움이 있다.

 

yarn berry

  • yarn berry
    • PnP (Plug n Play) 전략을 사용한다.
      • 패키지 설치시 더이상 node_modules에 저장되지 않는다. 대신 .yarn폴더가 생성되고 .yarn/cache 폴더에 해당 패키지의 의존성 정보가 저장되고 .pnp.js 파일에 의해 의존성을 찾을 수 있는 정보가 기록된다. > ZIP아카이브로 관리되게 되어 각 압축파일들이 존재한다.
    • Zero-install : .yarn 폴더 자체를 원격 저장소에 업로드하여 추가 yarn or npm 설치 필요없이 프로젝트를 바로 실행할 수 있다.
      • Zero-install 사용할 때 
      • .yarn/*
        !.yarn/cache
        !.yarn/patches
        !.yarn/plugins
        !.yarn/releases
        !.yarn/sdks
        !.yarn/versions
        
      • Zero-install 사용하지 않을 때
      • .pnp.*
        .yarn/*
        !.yarn/patches
        !.yarn/plugins
        !.yarn/releases
        !.yarn/sdks
        !.yarn/versions
        

 

* 참고자료 

 

 

yarn berry 적용기(1)

안녕하세요. 원티드 프론트엔드 팀 남동훈 입니다.

medium.com

 

 

node_modules로부터 우리를 구원해 줄 Yarn Berry

토스 프론트엔드 레포지토리 대부분에서 사용하고 있는 패키지 매니저 Yarn Berry. 채택하게 된 배경과 사용하면서 좋았던 점을 공유합니다.

toss.tech

 

 

yarn2와 함께 PnP(Plug'n'Play)를 적용해보자. (feat. Typescript)

먼저 기술적으로 적용시키기 전에 Yarn2 (Berry)가 나온 배경부터 알아봅시다. 바로 기술적인 내용이 필요하신 분이라면 스킵해도 좋습니다.

velog.io