npm vs yarn vs pnpm
1. 자바스크립트 패키지 매니저
- Frontend 개발자가 사용하는 자바스크립트 패키지 매니저: npm, yarn, pnpm 등
- 프로젝트 하나가 수십, 수백개의 패키지에 의존
- Node.js실행환경(runtime)에서 돌아감
- package.json이라는 파일에 프로젝트가 의존 및 패키지 목록 명시
- 패키지는 프로젝트의 node_modules디렉토리에 저장
2. npm (Node Package Manager)
1. Node.js의 표준 패키지 매니저
2. Node.js 설치 시 같이 설치되는 기본 패키지 매니저
2.1 npx (Node Package Runner)
- npm에서 제공해주는 하나의 도구
- 패키지의 최신버전 파일을 불러와 설치 및 실행하고 실행된 후 해당 패키지 제거
- create-react-app과 같이 모듈이 많고 업데이트가 잦은 경우 npx를 이용해 설치하는 것을 권장
3. yarn (Yet Another Resource Negotiator)
1. npm의 단점 보완을 위해 Facebook에서 만듬
- 성능 및 설치 속도: yarn은 병렬 실행, 캐시 사용으로 중복 데이터 다운로드 하지 않음
- 보안성 취약
- npm: 잠금 파일 없음, 패키지 설치 시 자동으로 포함된 의존성 패키지 설치하며 버그 발생
- yarn: yarn.lock으로 모든 디바이스에 같은 패키지 설치하는 것을 보장 및 버전 차이로 인한 버그 방지
- 이후 npm이 많은 단점을 개선하여 속도 차이가 많이 나지 않고 package.lock.json이라는 잠금 파일 제공
2. 별도의 설치가 필요하고 공식적으로 더 이상 기능 추가가 없음 (이후 나온 버전이 yarn-berry)
3.1 이후 npm과 yarn에서 발생하는 유령 의존성
- 유령 의존성
- 중복해서 설치되는 node_modules를 아끼기 위해 호이스팅 기법을 사용
- 그로 인해 직접 의존하고 있지 않은 라이브러리를 require()할 수 있는 현상
3.2 yarn Berry
- Facebook에서 발표한 yarn의 ver2
- plug'n Play(PnP)라고 불리는 새로운 패키지 관리 방식으로 유령 의존성에 관한 문제 해결
- 패키지를 프로젝트의 node_modules디렉토리에 저장하지 않음
- 패키지들에 대한 의존성 정보는 .zip파일로 압축, .yarn/cache폴더에 저장, 이를 찾기 위한 정보를 .pnp.cjs파일로 기록
4. pnpm (performant npm)
- npm과 yarn의 비효율을 개선한 노드 패키지 매니저
- npm과 yarn으로 여러 프로젝트를 관리하면 그 프로젝트들이 모두 같은 의존성을 사용하여 비효율적
- plug'n Play(PnP) 지원
- content-addressable file store
- pnpm은 글로벌 저장소인 ~/.pnpm-store에 모든 패키지를 저장하는 저장소를 두고 중첩된 패키지는 단 한번만 설치
- 사용하고자 하는 프로젝트에 symbolci link(sym link)를 만들어 효율적으로 패키지를 관리
- 다른 버전의 라이브러리를 사용하는 경우 저장소에 있는 라이브러리가 update가 되지 않고 다른 버전의 라이브러리만 새로 추가
장점
1. 불필요한 I/O 과정을 없애 빠르고 효율적
2. 패키지 중복 설치를 하지 않음으로 사용 용량이 적음
3. npm과 사용법이 비슷함
4. 모노레포 사용시 package.json에 peerdependency를 명시해야 함
5. 결론
1. 정답은 없고 자신에게 맞는 것으로 사용
2. npm도 계속적으로 업데이트 되어 yarn과 pnpm의 좋은 기능을 가지고 오는 추세
3. npm vs yarn vs pnpm 중에 본인에게 맞는 것을 사용
'플랫폼 > Node.js' 카테고리의 다른 글
[Node.js] npm에서 yarn Berry 혹은 pnpm으로 마이그레이션 (0) | 2024.08.02 |
---|---|
[Node.js] npm, node version upgrade (0) | 2024.08.01 |
댓글