我正在尝试将optional module loading in Typescript用于webextension-polyfill-ts模块。
我需要这样做是因为我正在使用TypeScript构建库,该库必须可在nodejs,浏览器和浏览器扩展上工作。
不幸的是,底层Mozilla的webextension-polyfill在非WebExtension上下文中引发错误。
使用TypeScript的可选加载,即使它不应该在上下文中加载模块,它也会引发错误。
使用try-catch块,我无法捕获错误。
这里是样品:
使用可选加载
import * as Browser from "webextension-polyfill-ts";
let browser: any = false;
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
// eslint-disable-next-line prettier/prettier
if (typeof chrome !== "undefined" && chrome.runtime && chrome.runtime.id) {
browser = require("webextension-polyfill-ts");
} else {
console.log("a");
}
export default browser;
使用try-catch
let browser: any = null;
try {
browser = require("webextension-polyfill-ts");
} catch (e) {
console.log("a");
}
export default browser;
[不确定为什么无法捕获该错误,但也许尝试输入打字稿?https://mariusschulz.com/blog/dynamic-import-expressions-in-typescript
看起来它返回了您可以兑现的承诺。
import("./widget").then(widget => {
widget.render(container);
}).catch((err) => { console.log('error', err) });
我发现了为什么它绑定到tinyify。只需通过browserify删除其用法即可解决此问题。