JavaScript 패키지 매니저의 간략한 역사 (npm, Yarn, pnpm)

Source

  • Evernote/Inbox/An abbreviated history of JavaScript package managers.md

Summary

이 문서는 JavaScript 생태계에서 npm, Yarn, pnpm이 등장하게 된 배경과 이들이 해결해 온 주요 문제점들을 설명한다. 초기 npm(v1)은 전역 설치의 불편함과 버전 충돌 문제를 해결하기 위해 로컬 설치와 중첩된 의존성 구조(nested dependency)를 도입하여 ‘의존성 지옥(dependency hell)‘을 해결했다. 그러나 이는 Windows의 파일 경로 길이 제한 문제를 야기했다. 이에 npm v3은 의존성 트리를 평탄화(flatten)하여 이 문제를 완화했다. 문서는 이러한 진화 과정을 통해 패키지 매니저가 의존성 트리의 자동화 및 관리를 어떻게 개선해 왔는지 서술한다.

Key Points

  • 패키지 매니저는 서브 의존성 설치부터 의존성 트리 구성까지의 작업을 자동화한다.
  • npm v1 (2011): 전역 설치의 한계(버전 충돌, package.json 미반영)를 해결하기 위해 로컬 설치와 중첩된 node_modules 구조를 도입하여 의존성 지옥을 해결.
  • 중첩 구조의 문제점: 깊은 파일 경로로 인해 Windows의 260자 경로 길이 제한을 초과하여 앱이 깨지는 현상 발생.
  • npm v3: 파일 경로 문제를 해결하기 위해 의존성 트리를 평탄화(flatten)하여 대부분의 의존성을 루트 node_modules에 배치.
  • 문서는 npm, Yarn, pnpm의 생성 동기와 해결 과제에 초점을 맞춘 역사적 서술임.