중첩 된 종속성을`yarn`으로 재정의하려면 어떻게해야합니까?
내 패키지에 이러한 종속성이있는 경우
{ "name": "my-package",
"dependencies": { "foobar":"~1.0.3", "baz":"2.0.9" }
그리고 foobar
패키지에는 이러한 종속성이 있습니다.
{ "name": "foobar",
"dependencies": { "baz":"^2.0.0" }
의 가장 최근에 출시 된 버전은 baz
입니다 2.1.0
.의 첫 번째 실행 yarn
은에 설치 baz@2.1.0
됩니다 foobar/node_modules
.
실이 baz@2.0.9
패키지 를 사용하도록 강제하는 방법은 foobar
무엇입니까?
내 이해는 이것이 사용 가능하다는 것입니다 npm shrinkwrap
( 이 질문 ).
내 질문의 요약은 아마도 Yarn은 반복 가능하고 결정적인 설치를 생성하지만 해당 설치를 어떻게 사용자 정의합니까?
실제로 허용 할 버전이 지나치게 제한적인 하위 종속성이 있는 경우 yarn을 사용하여 재정의 할 수 있습니다. 원래 질문이 정확하지 않은 것처럼 들리지만 원래 질문 은 실제로 제가 답변을 원했던 질문 이었고 답변을 찾았으므로 여기에 후손을위한 것입니다.
socket.io 라이브러리를 사용하고 component-emitter
있으며 종속성이 있습니다. 그러나 필요한 한 쌍의 버전이 있습니다. 이것은 내가 아무것도 변경하기 전에 yarn.lock 파일의 모습입니다.
component-emitter@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"
component-emitter@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.0.tgz#ccd113a86388d06482d03de3fc7df98526ba8efe"
그래서 그것은 내 클라이언트 코드에 두 개의 컴포넌트 이미 터 사본을 포함하고있었습니다. 1.1.2와 1.2.0 (또는 현재의 1.2.1) 사이에 주요 변경 사항이없는 것처럼 보였습니다. 먼저 yarn.lock 파일을 변경해 보았습니다.
component-emitter@1.2.1, component-emitter@^1.2.1, component-emitter@1.1.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
이것은 효과가 있었지만 파일에 자동 생성에 대한 경고가 있습니다. 즉, 추가하는 모든 단일 업데이트 또는 새 패키지가이 변경 사항에 영향을 미칩니다. 약간의 검색을 통해 yarn --flat
옵션을 찾았으며 , 이는 전체 프로젝트에서 각 패키지 중 하나만 선택하도록 강요합니다. 이전 패키지와 최신 패키지 사이에 실제 비 호환성 사례가 있다고 확신하기 때문에 그것은 나에게 과도한 것처럼 보입니다. 클라이언트 코드에서 중복 패키지를 제거하여 다운로드 크기를 줄이고 싶었습니다. 여전히 개발 패키지가 모두 올바르게 작동하기를 바랍니다.
하지만 yarn --flat 문서 에서 package.json에 들어갈 수있는 "해상도"블록에 대한 참조를 찾았습니다.
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
그래서 저는 "component-emitter" : "1.2.1"
package.json에 새로운 "해상도"블록을 넣어 보았습니다 . 그리고 실제로 그것을 필요로하는 모든 위치에 대해 component-emitter를 1.2.1로 평평하게했습니다. 그리고 이제 저는 제 클라이언트 코드에 단 하나의 복사본 만 있습니다.
업데이트 된 편집 : Yarn은 이제 1.0부터 공식적으로 위의 "해상도"블록을 지원 합니다. 그래서 그것을 사용하십시오.
이것은 이제 yarn의 선택적 버전 해결 기능으로 가능 합니다 .
프로젝트의 package.json
에서 다음을 사용하십시오 resolutions
.
"resolutions": {
"foobar/**/baz": "2.0.9"
}
이는의 패키지 foobar
(및 그 아래에있는 다른 모든 패키지) 버전을 재정 의하여 baz
버전 2.0.9가되도록합니다.
@SomeCallMeTime 의 대답 은 훌륭하며 우리는 한 달 동안 직장에서 해왔습니다.
불행하게도, 이것은 v0.24.x 더 이상부터 가능하지 않다 (즉, 참조 코멘트 ).
생성 된 잠금 파일을 주시 할 필요없이 해당 사용 사례를 처리하는 간단한 방법을 갖도록 RFC 제안과 함께 Github에 공개 된 PR 이 있습니다.
참고 URL : https://stackoverflow.com/questions/40226639/how-do-i-override-nested-dependencies-with-yarn
'program tip' 카테고리의 다른 글
CSS를 사용하여 고정 헤더로 스크롤 가능한 테이블을 만드는 방법 (0) | 2020.12.02 |
---|---|
순간 현재 날짜 가져 오기 (0) | 2020.12.01 |
마크 다운에 로컬 이미지를 표시하는 방법 (0) | 2020.12.01 |
OS가 브라우저에서 다크 모드인지 감지하는 방법은 무엇입니까? (0) | 2020.12.01 |
DEFINE 대 PHP의 변수 (0) | 2020.12.01 |