티스토리 뷰

resolutions

package.json에 resolutions라는 필드가 있는데, 여기서는 package.json에 있는 의존성들의 특정 버전이나 range를 지정할 수 있다.

package.json에는 일반적으로 semantic versioning을 사용하여 range로 패키지 버전을 설정하는데 왜 커스텀 버전을 설정할 필요가 있는걸까?

예를 들어 프로젝트가 A 패키지에 의존하고 있다고 가정하자. 그런데 A는 또 다른 패키지인 B에 의존하고 있다면, 여기서 B에 서브 의존성(또는 하위 의존성)이 있다고 할 수 있다. package.json 파일에는 우리가 직접적으로 의존하고 있는 A의 버전만 관리할 수 있을 뿐, 간접적으로 의존하고 있는 B에 대해서는 지정하지 않는다.

만약 A의 package.json에 B: ^1.0.0 이렇게 명시돼 있는데, B의 새로 업데이트된 버전인 1.1.0에서 심각한 보안 이슈가 발생했다고 하자. 그러면 당연히 B에 의존하고 있는 A에도 문제가 생길 수 있으므로, 하위 의존성인 B의 버전을 1.0.0에 고정하고 싶을 수 있다. 이런 경우에 아래처럼 하위 의존성 버전을 고정한다.

"resolutions": {
  "A/B": "1.0.0" // A의 하위에 있는 B 패키지의 버전을 1.0.0으로 고정한다. 
}

resolutions가 필요할 수 있는 경우

  • 하위 의존성 B에 대규모 업데이트가 있었는데 B에 의존하는 A가 이를 커버하지 않는 경우, A가 이 업데이트를 커버할 때까지 기다릴 수 없으므로 B의 버전을 earlier 버전으로 고정한다.
  • 하위 의존성 B에 마이너 업데이트가 있었는데 굳이 이를 반영할 필요성을 못 느끼는 경우
  • 부정적인 영향을 끼칠 수 있는 문제있는 업데이트가 있어서 earlier 버전에 고정하고 싶은 경우
  • 하위 의존성 B가 중요한 보안 이슈를 해결하는 업데이트를 했는데 A의 package.json에 반영되기를 기다리기를 원하지 않는 경우 직접 지정한다.

Ref

https://classic.yarnpkg.com/lang/en/docs/selective-version-resolutions/

https://devhyun.com/blog/post/8

'공부일지(TIL) > Web' 카테고리의 다른 글

자바스크립트로 파일 다운로드하기  (0) 2022.03.04
Static Rendering vs Server Side Rendering  (0) 2021.11.15
Yarn workspaces  (0) 2021.07.28
스크립트 로딩 (async, defer)  (0) 2021.07.20
Window vs Document  (0) 2021.07.20
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함