프로젝트를 새로 만들 때 해야할 고민 중 하나가 패키지 매니저로 무엇을 사용할까 입니다.
이번 포스터에서는 패키지 매니저별로 어떤 장단점이 있는지와 현재 어떤 패키지 매니저를 많이 사용하는지 알아보겠습니다.
패키지를 다루는 작업을 편리하고 안전하게 수행하기 위해 사용하는 툴입니다.
프로젝트가 의존하고 있는 패키지를 효과적으로 설치, 관리, 갱신, 삭제 할 수 있도록 도와주는 시스템입니다.
프론트엔드에서 가장 많이 사용하는 자바스크립트 패키지 매니저는 npm
,yarn
,pnpm
,yarn berry
에 대해 비교해보려고 합니다.
Node.js의 표준 패키지 매니저
npm의 단점을 보완하기 위해 Facebook에서 만든 패키지 매니저
패키지에서 이 패키지가 의존하는 모듈들을 전부 설치해버리면 정말 무거운 node_modules가 만들어집니다.
용량을 줄이기 위해서 npm와 yarn은 node_modules 내부의 중복된 패키지를 최소화하기 위해 각 패키지가 의존하고 있는 패키지들을 최상단으로 끌어올립니다. 이러한 방법으로 중복된 패키지가 최상단에 하나만 존재하게 되어 불필요한 중복을 제거할 수 있습니다.
하지만 여기서 가장 큰 문제점은 내가 설치한 패키지가 의존하고 있다는 이유로 내가 설치하지 않은 패키지도 최상단에 존재하기 때문에 불러올 수 있게 됩니다. 이러한 현상이 유령처럼 보여 유령 의존성이라고 부릅니다.
yarn과 npm의 가장 큰 문제점이 유령 의존성입니다.
yarn의 두번째 버전
Plug'n'Play(PnP)
라는 새로운 패키지 관리 방식 -> 유령 의존성 문제 해결
기존의 무거웠던 node_modules 대신, 패키지들에 대한 정보는 .zip
파일로 압축하여 .yarn/cache
폴더에 저장하고 이를 찾기 위한 정보를 .pnp.cjs
파일에 기록합니다.
.pnp.js
에 명시된 정보에 따라서 각 패키지들을 동적으로 참조
node_modules
방식 때보다 사용 용량이 획기적으로 줄음node_modules
폴더를 순회할 필요가 없어 검색 속도 증가