중첩 종속성을 "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의 제1차yarn설치 예정baz@2.1.0에foobar/node_modules.
실을 강제로 사용하려면 어떻게 해야 합니까?baz@2.0.9을 위한 꾸러미.foobar?
제가 알기로는 이것은 다음을 사용하여 가능할 것으로 알고 있습니다.npm shrinkwrap(a la 이 질문)
제 질문의 요약은 아마도 다음과 같습니다. Yarn은 반복 가능하고 결정론적인 설치를 만듭니다. 하지만 어떻게 설치를 사용자 지정할 수 있습니까?
실제로 어떤 버전을 수용할 것인지에 대해 지나치게 제한적인 하위 종속성이 있는 경우 실을 사용하여 이를 재정의할 수 있습니다.
업데이트된 편집: 1.0부터 Yarn은 "해상도" 블록을 공식적으로 지원합니다.따라서 해결 방법을 재정의하는 방법은 다음에 이와 같은 블록을 추가하는 것입니다.package.json:
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
때때로 "불가능한" 버전에 대한 경고가 나오겠지만, 일부 패키지(socket.io 와 같은)는 허용되는 버전이 지나치게 제한적이라는 것을 알게 되었습니다. 따라서 실제로 고장이 나지 않을 때 최신 버전을 기꺼이 선택하겠습니다.
아래의 원래 답변이지만 오래된 답변입니다.
원래 질문이 정확하지 않은 것처럼 들리지만, 원래 질문은 사실 제가 대답하기를 원했던 것이었고, 저는 답을 찾았습니다. 그래서 이것은 후세를 위한 것입니다.
나는 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"
그래서 그것은 제 클라이언트 코드에 구성 요소 이미터의 복사본 2개를 포함하고 있었습니다.확인해보니 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이 옵션은 실이 전체 프로젝트에서 각 패키지를 하나 이상 선택하지 않도록 합니다.오래된 패키지와 새 패키지 간에 호환되지 않는 경우가 실제로 있을 것이기 때문에, 그것은 저에게 너무 지나친 것처럼 보입니다.클라이언트 코드에서 중복 패키지를 제거하여 다운로드를 더 작게 만들고 싶었을 뿐입니다. 모든 개발 패키지가 올바르게 작동하기를 원합니다.
하지만 서류에서 -- 플랫에서 저는 패키지로 들어갈 수 있는 "해상도" 블록에 대한 언급을 발견했습니다.json:
"resolutions": {
"package-a": "2.0.0",
"package-b": "5.0.0",
"package-c": "1.5.2"
}
그래서 저는 퍼팅을."component-emitter" : "1.2.1"내 패키지의 새로운 "유통" 블록에서.json, 그리고 그것은 실제로 그것이 필요한 모든 장소에 대해 컴포넌트 이미터를 1.2.1로 평준화했고, 이제 나의 클라이언트 코드에는 오직 하나의 복사본이 있습니다.
(으)ㄹ.resolutions은 블은에완지다에서 됩니다.yarn사용할 필요도 없습니다.--flat.)
이것은 이제 얀의 선택적 버전 해상도 기능으로 가능합니다.
프로젝트의 기본(루트)package.json,사용하다resolutions:
"resolutions": {
"foobar/**/baz": "2.0.9"
}
를 재정의합니다.foobar그 아래에 ) 의 (및그아있다패키지른는버전) 래baz강제로 버전 2.0.9로 설정합니다.
편집: 이제 더 이상 사용되지 않습니다. 대신 다음 답변을 읽어보십시오.
https://stackoverflow.com/a/46615878/2398593
@SomeCallMeTime의 답변은 훌륭하며 우리는 직장에서 몇 달째 그렇게 하고 있습니다.
안타깝게도 v0.24.x 이후로는 더 이상 이 작업을 수행할 수 없습니다(해당 설명 참조).
생성된 잠금 파일을 감시할 필요 없이 사용 사례를 간단하게 처리할 수 있는 방법을 제공하는 RFC 제안과 함께 Github에 공개된 PR이 있습니다.
언급URL : https://stackoverflow.com/questions/40226639/how-do-i-override-nested-dependencies-with-yarn
'codememo' 카테고리의 다른 글
| builder @angular-devkit/build-angular:dev-server on server 명령에 대한 구현을 찾을 수 없습니다. (0) | 2023.07.27 |
|---|---|
| 서비스 계정을 변경하는 Powershell 스크립트 (0) | 2023.07.27 |
| 스프링: web.xml의 네임스페이스 대 contextConfigLocation init 매개 변수 (0) | 2023.07.27 |
| Flexbox 항목을 동일한 크기로 만드는 방법 (0) | 2023.07.27 |
| Spring Webflux 대 Vert.x (0) | 2023.07.27 |