Skip to content
On this page

node_modules의 구조

pnpm i 로 dependency들을 설치하면 프로젝트 node_modules는 아래와 같은 구조를 가집니다.

text
node_modules
├- .pnpm
├- .modules.yaml
├- pkg1 -> .pnpm/pkg1@1.2.3/node_modules/pkg1
|  ├- package.json
|     ├- "dependencies"
|        ├- "dep1": "1.1.1"
|
├- pkg2 -> .pnpm/pkg2@3.2.1/node_modules/pkg2
|  ├- package.json
|     ├- "version": "3.2.1"
|     ├- "dependencies"
|        ├- "dep2": "1.1.2"
├- ...

node_module/.pnpm에 위치한 pkg1와 pkg2와 같은 개별 dependency들은 아래와 같이 flat 구조로 저장됩니다.

text
node_modules
├- .pnpm
   ├- pkg1@1.2.3
   |  ├- node_modules
   |.    ├- pkg1 -> cas/pkg1
   |     ├- dep1 -> ../../dep1@1.1.1/node_modules/dep1
   |
   ├- pkg2@3.2.1
   |  ├- node_modules
   |.    ├- pkg2 -> cas/pkg2
   |     ├- dep2 -> ../../dep2@1.1.2/node_modules/dep2
   |
   ├- dep1@1.1.1
   |  ├- node_modules
   |     ├- dep1 -> cas/dep1
   |
   ├- dep2@1.1.2
      ├- node_modules
         ├- dep2 -> cas/dep2

위에서 볼 수 있듯이 실제로 node_modules 또는 .pnpm에 있는 pkg1와 pkg2, 그리고 관련 dep들은 모두 cas에 저장된 원본 패키지들을 참조하는 symlink입니다.

INFO

이러한 성격을 반영한듯 .pnpm을 "virtual store directory"라고 칭합니다.