programing

피어 종속성을 선택적으로 설정하려면 어떻게 해야 합니까?

procenter 2023. 7. 9. 22:35
반응형

피어 종속성을 선택적으로 설정하려면 어떻게 해야 합니까?

저는 A 모듈을 개발하고 있습니다.사용자는 선택적으로 윈스턴 로거를 내 모듈에 주입할 수 있습니다.winston피어 종속성입니다.

모듈 A를 다른 모듈에 설치할 때마다 기록을 원하지 않는 경우(따라서 Winston은 포함하지 않음)tscTypescript에서 다음과 같이 외칩니다.

모듈 'winston' 또는 해당 형식 선언을 찾을 수 없습니다.

어떻게 해야 하나요?

NPM v7.x 이후에는peerDependenciesMeta꾸러미json config, 정확히옵션을 허용합니다.

예를 들어, "모듈 A"에서package.json:

"peerDependencies": { 
  "winston": "> 1.0.0 <= 1.2.10",
  "foo": "~2.3.0"
},
"peerDependenciesMeta": {
  "winston": {
    "optional": true
  }
}

이 경우 다른 프로젝트의 종속성으로 모듈 A를 설치할 때 설치가 가능합니다.winston지정된 semver 범위의 종속성 버전> 1.0.0 <= 1.2.10하지만 전혀 없는 경우에는 오류가 발생하지 않으므로 이 또한 허용됩니다.

이 예에 따라 다음과 같이 수행합니다.foo로 표시되지 않았기 때문에 종속성이 여전히 필요합니다.optional.

추가 팁: 이 유틸리티를 사용하여 사용 가능한 NPM 패키지의 범위를 확인하고 테스트할 수 있습니다. https://semver.npmjs.com/, 도 도움이 되었습니다.

PS. SO에 대한 첫 번째 답변입니다! :)

@tmilar의 대답에 약간의 추가.나는 선택적 종속성(그리고 윈스턴 :))을 추가하기 위해 같은 방법을 사용하고 있습니다. 예는 지원하는 npm@7에 대한 것입니다.peerDependenciesMeta

"peerDependencies": { 
  "winston": "~3.3.0"
},
"peerDependenciesMeta": {
  "winston": {
    "optional": true
  }
}

선택적 종속성의 경우 패키지 버전 요구 및 확인에 대한 예외를 예상해야 합니다.

let winston;
let winstonVersion;
try {
  winston = require('winston')
  winstonVersion = require('winston/package.json').version
} catch (er) {
  winston = null
}

if (isUnsupportedVersion(winstonVersion) ) {
  winston = null
}

// .. then later in your program ..

if (winston) {
  winston.doSomething()
}

언급URL : https://stackoverflow.com/questions/62047806/how-do-i-set-a-peer-dependency-optional

반응형