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"라고 칭합니다.