패키지 매니저란?
소프트웨어 개발에서 사용하는 라이브러리 등과 같은 패키지를 설치, 업데이트, 제거, 의존성 및 버전 등을 쉽게 관리할 수 있도록 도와주는 도구
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` 파일을 사용하여 패키지 버전 고정
- `node_modules` 디렉토리에 패키지를 설치하지만 각 패키지는 중앙 저장소에 저장된 패키지의 하드 링크로 연결
- pnpm는 npm과 yarn에 비해 상대적으로 최신 도구이기 때문에 커뮤니티와 관련 자료가 적음
- 일부 라이브러리와 완벽하게 호환이 되지 않거나, 동작 차이로 인해 예상치 못한 예외 발생할 가능성이 있음
- 참고) https://pnpm.io/ko/motivation
// npm을 통해 pnpm 설치
npm install -g pnpm
※ 요약
- npm은 안정적이고 기본적인 기능을 제공하며, node.js와의 호환성이 높음
- yarn은 성능과 일관성에 중점을 둔 패키지 매니저로써, 대규모 프로젝트에 적합
- pnpm은 디스크 공간 절약과 빠른 속도를 최우선으로 하며, 특히 대규모 모노레포 환경에 효과적
결론은 각 패키지 매니저는 고유의 강점과 특징을 가지고 있으므로, 프로젝트 요구 사항에 따라 적합한 도구를 선택할 것.
'개발 공부 > Node.js' 카테고리의 다른 글
[Nestjs] Logging - 애플리케이션의 동작 (0) | 2022.05.20 |
---|---|
[Node.js] class-validator (0) | 2022.03.17 |
[Node.js] Express - Pug (템플릿 엔진) (0) | 2022.02.15 |
[Node.js] Express.js - (아주아주) 간단한 웹 앱 만들기 1 (0) | 2022.02.14 |
[Node.js] npm - UglifyJS 모듈 (0) | 2022.01.27 |