我正在尝试开发仅在某些系统上运行的软件包。还有一个“模拟”版本的包也存在。
我想要一个“模块”,我可以import
从我的主包中自动回退到包的“模拟”版本,当主包无法导入时(因为它由于操作系统/引擎限制而没有安装,或者它失败了启动时)。
这是我到目前为止所拥有的:
import { Gpio as GpioClass, GpioBank as GpioBankClass, Notifier as NotifierClass } from 'pigpio';
let pigpio: {
Gpio: typeof GpioClass;
GpioBank: typeof GpioBankClass;
Notifier: typeof NotifierClass;
};
try {
pigpio = require('pigpio');
} catch (e) {
process.env.PIGPIO_NO_LOGGING = 'yes';
pigpio = require('pigpio-mock');
}
export const { Gpio, GpioBank, Notifier } = pigpio;
这种工作但似乎会导致我的代码的其他部分出现一些导入错误/排序问题。
我怀疑从长远来看,使用import
andexport
会更好。也许这是一个有缺陷的假设。我仍然不是 100% 清楚import
/是如何export
工作的。
我试过使用“异步”import(...)
功能无济于事:
import { Gpio as GpioClass, GpioBank as GpioBankClass, Notifier as NotifierClass } from 'pigpio';
let pigpio: Promise<{
Gpio: typeof GpioClass;
GpioBank: typeof GpioBankClass;
Notifier: typeof NotifierClass;
}>;
try {
pigpio = import('pigpio');
} catch (e) {
process.env.PIGPIO_NO_LOGGING = 'yes';
pigpio = import('pigpio-mock');
}
// This doesn't work. Cannot use top level await.
export const { Gpio, GpioBank, Notifier } = await pigpio;
我是否缺少某些export
工作方式?或者也许就像你如何才能await
实现一个非async
函数,只要它返回一个 Promise 而我只需要它module.exports = import(...)
?然而,这似乎不起作用。
最重要的是为 TypeScript 获取正确的类型信息。