본문으로 바로가기

TIL 2022-04-27 package-lock, package-manager

category TIL 2022. 4. 27. 22:24
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