본문 바로가기
개발 공부/Node.js

[Package Manager] npm / yarn / pnpm

by sngynhy 2024. 9. 3.

패키지 매니저란?

소프트웨어 개발에서 사용하는 라이브러리 등과 같은 패키지를 설치, 업데이트, 제거, 의존성 및 버전 등을 쉽게 관리할 수 있도록 도와주는 도구

 

npm / yarn / pnpm

Node.js 환경에서 Javascript 패키지를 관리하는 패키지 매니저

 

1. npm (node package manager)

  • node.js와 함께 기본으로 설치되는 패키지 매니저로 가장 오래되고 널리 사용됨 (별도의 설치 필요 X)
  • 초기 버전의 npm은 상대적으로 느렸으나, 이후 속도가 개선되었지만 여전히 다른 패키지 매니저에 비해 느림
  • 설치 방식
    • 기본적으로 `node_modules` 디렉토리에 패키지들을 설치함
    • 각 패키지가 의존하는 패키지를 중복해서 설치하기 때문에 패키지 간에 의존도가 높으며 `node_modules` 의 크기가 크게 증가할 수 있음 => 만약 하나의 패키지에서 문제 발생 시 다른 패키지에서도 문제가 발생할 수 있음
    • Lock File:  `package-lock.json` 파일을 통해 설치된 패키지의 버전 정보를 고정하여 일관된 환경을 유지
  • npm은 커뮤니티와 패키지 생태계가 매우 크고 활발
  • npm7 버전부터 워크스페이스 기능 지원 => 모노레포 환경에서의 개발이 용이해짐
    모노레포란? 여러 프로젝트나 라이브러리를 하나의 저장소에서 관리하는 단일 레포
// 새 프로젝트를 초기화 하고 `package.json` 파일을 생성
npm init
npm init -y   // 기본값으로 초기화

// `package.json`에 명시된 모든 의존성 설치
npm istall
npm i

// 특정 패키지 설치 => `package.json`의 `dependencies`에 추가됨
npm install [패키지명]

// 특정 패키지 삭제
npm uninstall [패키지명]

// 프로젝트의 모든 패키지를 최선 버전으로 업데이트
npm update

// 설치된 패키지의 버전을 확인하고, 업데이트가 필요한 패키지를 알려줌
npm outdated

// `package.json`에 더 이상 명시되지 않은 패키지를 `node_modules`에서 제거
npm prune

// npm 캐시 삭제
npm cache clean --force

 

2. yarn

  • yarn은 npm의 성능 문제와 일관성, 보안 문제 등을 해결하기 위해 만든 패키지 매니저
  • 초기 버전부터 성능 최적화에 중점을 두었으며, 특히 네트워크 요청의 병렬 처리 및 캐싱을 통해 설치 속도가 빠름
  • 설치 방식
    • `node_modules` 디렉토리에 패키지를 설치
    • 중복 패키지를 방지하고 패키지 설치를 보다 효율적으로 처리 (npm과의 차이점)
    • Lock File:  `yarn.lock` 파일을 사용하여 패키지 버전 정보를 관리 (`package-lock.json`보다 간결하고 더 일관된 환경 제공)
  • 워크스페이스 기능을 통해 모노레포에서 다중 패키지 관리가 쉬움
// npm을 통해 먼저 yarn 설치 필요
npm install -g yarn

// 새 프로젝트 초기화
yarn init

// 특정 패키지 설치
yarn add [패키지명]

// 특정 패키지 제거
yarn remove [패키지명]

// 모든 혹은 특정 패키지 최신 버전으로 업데이트
yarn upgrade
yarn upgrade [패키지명]

 

3. pnpm (performant npm)

  • pnpm은 성능디스크 사용량을 최적화하기 위해 만들어진 패키지 매니저
  • 패키지 설치 시 동일한 버전의 패키지는 한 번만 다운로드하고 이를 하드 링크로 연결하여 다른 프로젝트에서 재사용
  • 로컬 캐시를 사용하여 의존성 트리가 큰 프로젝트에서도 속도 설치가 빠름
  • 설치 방법
    • `node_modules` 디렉토리에 패키지를 설치하지만 각 패키지는 중앙 저장소에 저장된 패키지의 하드 링크로 연결
      => 패키지 중복 설치를 방지하고 디스크 공간을 절약 (
      `node_modules`의 크기가 npm이나 yarn보다 훨씬 작음)
    • Lock File: ` pnpm-lock.yaml` 파일을 사용하여 패키지 버전 고정
  • pnpm는 npm과 yarn에 비해 상대적으로 최신 도구이기 때문에 커뮤니티와 관련 자료가 적음
  • 일부 라이브러리와 완벽하게 호환이 되지 않거나, 동작 차이로 인해 예상치 못한 예외 발생할 가능성이 있음
  • 참고) https://pnpm.io/ko/motivation
// npm을 통해 pnpm 설치
npm install -g pnpm

 

※ 요약

  • npm은 안정적이고 기본적인 기능을 제공하며, node.js와의 호환성이 높음
  • yarn은 성능과 일관성에 중점을 둔 패키지 매니저로써, 대규모 프로젝트에 적합
  • pnpm은 디스크 공간 절약과 빠른 속도를 최우선으로 하며, 특히 대규모 모노레포 환경에 효과적

결론은 각 패키지 매니저는 고유의 강점과 특징을 가지고 있으므로, 프로젝트 요구 사항에 따라 적합한 도구를 선택할 것.