alpaka206

npm, pnpm, npx, yarn 정

date
Aug 16, 2024
slug
npm-pnpm-npx-yarn
author
status
Public
tags
Study
summary
npm, pnpm, npx, yarn 정리
type
Post
thumbnail
category
✍️ Study
updatedAt
May 30, 2025 04:29 PM

JavaScript 프로젝트 관리 도구들

개발을 하다 보면 JavaScript 프로젝트를 관리하고 실행하기 위해 여러 도구를 사용하게 됩니다. 대표적으로 npm, pnpm, npx, yarn 등이 있습니다. 이 도구들은 프로젝트 개발 및 유지보수를 효율적으로 만들어줍니다. 하지만 어떤 도구를 언제 어떻게 사용해야 하는지 알기 어려워 이 포스트를 작성하게 되었습니다.

개발 및 유지보수를 도와주는 방법

1. 의존성 관리

패키지 매니저인 npm이나 yarn을 사용하여 프로젝트에 필요한 의존성을 명시하고 쉽게 설치할 수 있습니다. 의존성은 프로젝트가 올바르게 동작하고 기능을 수행하기 위해 필요한 외부 코드나 라이브러리입니다. 패키지 매니저를 통해 이러한 의존성들을 버전 충돌 없이 프로젝트에 통합할 수 있습니다.

2. 버전 관리

프로젝트의 라이브러리와 모듈은 지속적으로 업데이트됩니다. 패키지 매니저는 각 패키지의 버전을 명시하고 프로젝트에 적용된 버전을 추적합니다. 이를 통해 특정 버전에서 발생하는 문제를 파악하고, 안정적인 업데이트를 수행할 수 있습니다.

3. 초기 환경 설정 및 빌드 스크립트

패키지 매니저를 이용해 초기 프로젝트 설정을 간편하게 수행할 수 있습니다. 또한 npm 또는 yarn을 사용해 빌드 스크립트를 구성하면 개발 환경을 쉽게 설정하고, 빌드 및 배포 프로세스를 효율적으로 관리할 수 있습니다.

4. 일회성 명령어 실행

특정 작업을 위해 다양한 도구를 사용해야 합니다. npx를 통해 로컬에 설치하지 않고도 필요한 도구를 일회성으로 실행할 수 있습니다. 예를 들어, 프로젝트에 특정 테스트 도구가 필요한 경우, npx를 사용해 해당 도구를 간편하게 실행할 수 있습니다.

5. 성능 및 안정성 개선

프로젝트의 성능이나 안정성을 개선해야 합니다. yarn은 npm보다 빠른 의존성 설치 속도와 캐시 기능을 제공하여 프로젝트의 빌드 및 실행 속도를 향상시킬 수 있습니다. 또한, 안정성 측면에서도 yarn은 예측 가능한 의존성 해결을 제공합니다.
이렇게 프로젝트의 개발과 유지보수를 효율적으로 진행할 수 있습니다.

npm, pnpm, npx, yarn 장단점과 차이점

npm

장점
  • Node.js에 내장되어 있어 추가로 설치할 필요가 없습니다.
  • 사용자들이 만들어 놓은 다양한 모듈을 쉽게 사용할 수 있습니다.
단점
  • npm은 패키지 매니저의 시초와 같아 생태계가 매우 풍부하지만, node_modules 폴더 크기가 커져 불필요한 프로젝트 삭제 시 시간이 오래 걸립니다.
  • 패키지 간의 의존성 문제가 발생할 수 있어, 이를 해결하기 위해 package.json이 필요합니다.

pnpm

장점
  • 다른 JavaScript 패키지 매니저에 비해 최대 2배 이상 빠릅니다. (의존성마다 설치가 병렬적으로 수행되기 때문)
  • 프로젝트별로 node_modules에 매번 패키지를 설치하는 대신, global 저장소에 패키지를 한 번만 저장하여 저장 공간을 절약할 수 있습니다.
  • npm을 사용했던 개발자들이 쉽게 적용할 수 있습니다.
  • 모노레포 지원
  • npm 9.4v 부터 isolated node_modules 모듈 지원
단점
  • 특정 패키지를 한 번만 설치하기 때문에 프로젝트별로 연결을 해놓으면 호환 문제가 발생할 수 있습니다. 따라서 프로젝트 간 호환 문제를 피하기 위해 버전 관리를 철저히 해야 합니다.

npx

장점
  • npx를 통해 프로젝트에 필요한 도구를 쉽게 실행할 수 있습니다.
  • 로컬에 설치하지 않고 일회성으로 패키지를 실행할 수 있습니다.
  • 패키지를 설치하고 업데이트하지 않더라도, npm 레지스트리에 올라가 있는 최신 버전을 실행시킬 수 있습니다.
  • 필요할 때만 실행하므로, 프로젝트 간에 패키지 충돌을 피할 수 있습니다.
단점
  • 인터넷 연결이 필요합니다.
  • 내부적으로 캐시를 사용하고, 이를 관리하기 위한 추가적인 과정이 필요합니다.
  • 보안 및 버전 관리에 대한 주의가 필요합니다.

yarn

장점
  • lock 파일은 package.json에서 사용하는 버전 숫자의 혼란을 줄여줍니다.
  • npm의 보안 문제를 해결하고 안정성을 보장합니다.
  • 여러 개의 패키지를 병렬로 설치해 속도 측면에서 우수합니다.
단점
  • yarn.lock 파일의 버전 관리로 인해 기존 모듈이 최신화될 수 있으며, 이 경우 하위 호환을 보장하지 않는 모듈의 경우 에러가 발생할 수 있습니다.
  • 최근 버전의 npm에서도 성능이 개선되어 성능 차이가 크게 나지 않을 수 있습니다.
  • npm보다 다운로드 크기가 크고, 디스크 공간을 더 많이 차지할 수 있습니다.
  • 더 많은 메모리를 사용할 수 있습니다.

그러면 어떤 상황에서 어떤걸 써야 할까?

📌 npm

웹 애플리케이션 개발, 서버 개발, CLI 도구 등 다양한 유형의 프로젝트에 적합

📌 pnpm

여러 프로젝트 간에 의존성을 공유하고자 하거나, 디스크 공간을 효율적으로 사용하고자 하는 프로젝트에 적합

📌 npx

특정 스크립트나 도구를 일회성으로 실행해야 하는 경우에 적합

📌 yarn

대규모의 웹 애플리케이션 또는 모듈화된 프로젝트에 적합

기능 비교

기능
pnpm
yarn
npm
워크스페이스 지원
✔️
✔️
✔️
격리된 node_modules
✔️ - 기본값
✔️
✔️
호이스팅된 node_modules
✔️
✔️
✔️ - 기본값
피어 자동 설치
✔️
✔️
Plug'n'Play
✔️
✔️ - 기본값
Zero-Installs
✔️
의존성 패치
✔️
✔️
Node.js 버전 관리
✔️
lockfile 보유
✔️ - pnpm-lock.yaml
✔️ - yarn.lock
✔️ - package-lock.json
재정의 지원
✔️
✔️ - resolution을 통해
✔️
Content-addressable 저장소
✔️
동적 패키지 실행
✔️ - pnpm dlx를 통해
✔️ - yarn dlx를 통해
✔️ - npx를 통해
부작용 캐시
✔️
Listing licenses
✔️ - pnpm licenses list
✔️ - Via a plugin