피어 종속성을 선택적으로 설정하려면 어떻게 해야 합니까?
저는 A 모듈을 개발하고 있습니다.사용자는 선택적으로 윈스턴 로거를 내 모듈에 주입할 수 있습니다.winston
피어 종속성입니다.
모듈 A를 다른 모듈에 설치할 때마다 기록을 원하지 않는 경우(따라서 Winston은 포함하지 않음)tsc
Typescript에서 다음과 같이 외칩니다.
모듈 '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
'programing' 카테고리의 다른 글
새로운 Firebase 클라우드 메시징 시스템이 포함된 알림 아이콘 (0) | 2023.07.09 |
---|---|
"git branch"와 "git checkout -b"의 차이점은 무엇입니까? (0) | 2023.07.09 |
프로그램 파일 x86 env 변수를 가져오는 방법은 무엇입니까? (0) | 2023.07.09 |
각 2 typescript 주변 상황에서 구현을 선언할 수 없습니다. (0) | 2023.07.09 |
오라클 저장 프로시저 내에서 다른 사용자의 테이블 액세스 (0) | 2023.07.09 |