我正在制作一个npm打印包。
它使用discord.js,但discord.js有两个主要版本:
- 不一致. js 11.5
- js v12.0.0-开发人员
我希望我的模块支持这两个版本。我的意思是,用户可以安装他们想要的discord.js版本,包将使用好的代码。
对于另一个项目,在javascript中(没有typescript),我使用以下代码:
const { version } = require("discord.js");
if(version === "12.0.0-dev"){
// code for v12
} else {
// code for v11
}
而且运行得很好。但是,使用typescript,由于打字的原因,它会更加复杂。实际上,discord.js在v11和v12中的打字是不一样的,所以我不能用这两个版本编译代码:
const { Guild, version } = require("discord.js");
if(version === "12.0.0-dev"){
Guild.iconURL(); // for v12
} else {
Guild.iconURL; // for v11
}
如果安装了v12,则会抛出iconURL() doesn't exist on Guild
;如果安装了v11,则会抛出iconURL doesn't exist on Guild
。
有没有办法在同一个包中支持两个版本,而不用为每个版本创建一个分支?
2条答案
按热度按时间xzabzqsa1#
虽然不是很理想,但您可以手动下载v11和v12的类型,并将模块名称更改为如下形式:
然后,您可以按如下方式导入类型:
您也可以定义类型保护:
我尝试在
package.json
中使用discord@11和discord@12的别名,如下所示:但是我得到了这个错误:
3htmauhk2#
npm i formik-v2@npm:formik@2.0.0
或
yarn add formik-v2@npm:formik@2.0.0
然后您可以
import * from 'formik-v2'
https://medium.com/weekly-webtips/how-to-install-multiple-versions-of-the-same-package-in-npm-71c29b12e253