package-lock.json
package-lock은 설치된 패키지들의 정확한 버젼들을 track 해서 동일하게 reproducible하게 되는 것이 목표
package.json에서는 ^0.13.0, ~0.13.0 등의 semver notation을 통해 버젼을 명시할 수 있음
^0.13.0은 가장 왼쪽의 nonzero 값이 바뀌지 않는 수준에서 버젼을 업데이트하고,
~0.13.0은 patch release, 즉 0.13.1, 0.13.2 등은 가능하고 0.14.0은 불가능
대체로 node_modules 폴더를 git에 올리지 않기 떄문에 semver로 명시된 package들은 프로젝트마다 달라질 수 있다.
patch release들이 breaking change를 가지고 있지는 않더라도, 소소한 버그들이 발생할 수 있음.
package-lock은 버젼을 확정한다, npm update를 실행하면 package-lock이 업데이트됨!
package manager에 대해서는 예전에 한번 정리한적이 있었는데 쓰다보니 다시 헷갈려서 적음
npm
├── node_modules/
├── .npmrc
├── package-lock.json
└── package.json
가장 전통적인 방법으로 package들이 저장된 node_modules, npm 설정들이 들어있는 npmrc, package 정보들이 정확하게 들어있는 package-lock, 그리고 package.json
yarn classic
├── .yarn/
│ ├── cache/
│ └── releases/
│ └── yarn-1.22.17.cjs
├── node_modules/
├── .yarnrc
├── package.json
└── yarn.lock
다른 부분은 cache folder, 현 yarn classic version의 주소가 담긴 release 정도다.
yarn berry + node_modules
yarn berry 같은 경우는 node_modules, pnp 두가지 방식이 가능하다
├── .yarn/
│ ├── cache/
│ └── releases/
│ └── yarn-3.1.1.cjs
├── node_modules/
├── .yarnrc.yml
├── package.json
└── yarn.lock
2세대부터는 npmrc, .yarnrc가 아니라 .yarnrc.yml이라는 파일을 통해 설정을 관리하고,
nodeLinker: node-modules # or pnpm
yarnrc.yml에서 nodeLinker로 node-modules를 설정해줘야한다
yarn berry + pnp
# .yarnrc.yml
nodeLinker: pnp
pnpMode: loose
├── .yarn/
│ ├── cache/
│ ├── releases/
│ │ └── yarn-3.1.1.cjs
│ ├── sdk/
│ └── unplugged/
├── .pnp.cjs
├── .pnp.loader.mjs
├── .yarnrc.yml
├── package.json
└── yarn.lock
yarnrc.yml에서는 저렇게 설치하고(pnpMode는 loose, strict 둘다 가능)
yarn cache에 의존성 정보가 저장되고, 이를 pnp.js라는 파일에서 의존성을 찾을수 있는 정보를 기록함. 모든 파일은 zip으로 관리됨.
그리고 이 Zip 파일을 원격 저장소에 업로드하면, 사용자 입장에서는 라이브러리를 다운받고 yarn install 등 할 필요 없이 바로 실행 가능함. 이래서 Plug N Play(Zero Install)라는 거임.
CI 할때 설치 과정이 생략되서 더 빨라지는게 엄청난 메리트.
그리고 위와 같은 방식으로는 npm에서 끌어올려서 생기는 ghost dependency 문제가 없음
요즘 전신이 발진이 나서 절전모드라 오랜만에 글쓴다.... 빨리 건강하게 성실하게 살아야지
'TIL' 카테고리의 다른 글
TIL 2022-05-03 HTML Details, Summary Tag (0) | 2022.05.03 |
---|---|
TIL 2022-04-28 monorepo, global css Nextjs 문제 (0) | 2022.04.28 |
TIL 2022-04-20 svelte tutorial 5 (0) | 2022.04.20 |
TIL 2022-04-19 Svelte Tutorial 1~4 (0) | 2022.04.19 |
TIL 2022-04-18 Svelte (0) | 2022.04.18 |