如何设置可选的对等依赖项?
How do I set a peer dependency optional?
我正在开发模块 A。用户可以选择将 Winston 记录器注入我的模块,因此 winston
是其对等依赖项。
每当我将我的模块 A 安装到另一个我不想记录内容的模块(因此我不包括 Winston)并尝试 tsc
它时,Typescript 大喊:
Cannot find module 'winston' or its corresponding type declarations.
我该怎么做?
自从 NPM v7.x,您可以使用 peerDependenciesMeta
package.json 配置,它允许 that option.
例如,在您的“模块 A”中 package.json
:
"peerDependencies": {
"winston": "> 1.0.0 <= 1.2.10",
"foo": "~2.3.0"
},
"peerDependenciesMeta": {
"winston": {
"optional": true
}
}
在这种情况下,当安装模块 A 作为另一个项目的依赖项时,它将允许在指定的语义版本范围内安装 winston
依赖项版本 > 1.0.0 <= 1.2.10
,但如果它根本不存在,你不会得到错误,所以它也将被允许。
请注意,在此示例之后,仍然需要 foo
依赖项,因为它未标记为 optional
。
额外提示:您可以使用此实用程序检查和测试可用 NPM 包的范围 https://semver.npmjs.com/,它对我也有帮助。
PS。这是我对 SO 的第一个回答! :)
只是对@tmilar 回答的一小部分补充。
我使用相同的方式添加可选依赖项(还有 winston :))
该示例适用于支持 peerDependenciesMeta
的 npm@7
"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()
}
我正在开发模块 A。用户可以选择将 Winston 记录器注入我的模块,因此 winston
是其对等依赖项。
每当我将我的模块 A 安装到另一个我不想记录内容的模块(因此我不包括 Winston)并尝试 tsc
它时,Typescript 大喊:
Cannot find module 'winston' or its corresponding type declarations.
我该怎么做?
自从 NPM v7.x,您可以使用 peerDependenciesMeta
package.json 配置,它允许 that option.
例如,在您的“模块 A”中 package.json
:
"peerDependencies": {
"winston": "> 1.0.0 <= 1.2.10",
"foo": "~2.3.0"
},
"peerDependenciesMeta": {
"winston": {
"optional": true
}
}
在这种情况下,当安装模块 A 作为另一个项目的依赖项时,它将允许在指定的语义版本范围内安装 winston
依赖项版本 > 1.0.0 <= 1.2.10
,但如果它根本不存在,你不会得到错误,所以它也将被允许。
请注意,在此示例之后,仍然需要 foo
依赖项,因为它未标记为 optional
。
额外提示:您可以使用此实用程序检查和测试可用 NPM 包的范围 https://semver.npmjs.com/,它对我也有帮助。
PS。这是我对 SO 的第一个回答! :)
只是对@tmilar 回答的一小部分补充。
我使用相同的方式添加可选依赖项(还有 winston :))
该示例适用于支持 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()
}