npm, pnpm, yarn 차이점

앞으로 pnpm 을 사용하려고 하는데, 장점 단점은?

1 답변

0 투표

좋은 질문이에요 결론부터 말하면 pnpm도 여전히 node_modules를 생성합니다. 다만 방식이 npm/yarn과 다릅니다.


node_modules가 필요한가?

  • Node.js의 모듈 해석 규칙(require / import)은 기본적으로 node_modules 폴더를 탐색합니다.
  • 따라서 대부분의 패키지·도구·런타임은 여전히 node_modules 폴더가 있어야 정상 동작합니다.

pnpm의 node_modules 특징

  • 일반 복사본 아님: 각 패키지를 프로젝트마다 복사하지 않고, 전역 store에 한 번만 저장한 뒤 하드링크/심링크로 연결합니다.
  • 구조가 엄격함: node_modules/.pnpm/ 내부에 패키지들이 버전별로 격리되어 배치되고, 필요한 패키지들만 심링크로 노출합니다. → 덕분에 phantom dependency(명시 안 한 의존성을 우연히 가져다 쓰는 문제)를 차단합니다.
  • 옵션 존재:

    • nodeLinker=hoisted (npm/yarn처럼 평탄화된 구조)
    • nodeLinker=isolated (프로젝트별 격리, 실험적)
    • 기본값은 isolated + 심링크 방식

Yarn과 비교

  • Yarn Berry(PnP)만이 진짜로 node_modules 없이도 동작합니다. 대신 일부 툴이 호환성 문제를 겪을 수 있습니다.
  • pnpm은 호환성을 위해 node_modules를 남겨두지만 내부 구조는 효율적입니다.

정리

  • pnpm도 node_modules는 필요하다.
  • 하지만 패키지를 직접 복사하지 않고 전역 저장소를 심링크로 연결하므로 → 속도 빠르고 디스크 절약.
  • Yarn Berry(PnP)는 아예 node_modules 없이도 가능하지만, pnpm은 호환성 때문에 기본적으로 만듭니다.

혹시 원하시면, 제가 .npmrc 설정에서 nodeLinker 옵션을 어떻게 바꿀 수 있는지, 그리고 어떤 상황에서 shamefully-hoist 같은 호환성 옵션을 켜야 하는지까지 예시를 보여드릴까요?

구로역 맛집 시흥동 맛집
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
add
...