如何使用 Typescript 捕获 require 抛出的错误?

How to catch thrown error from require using Typescript?

我正在尝试使用 optional module loading in Typescript for the 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;

不确定为什么您无法捕捉到错误,但可以试试 typescript import? https://mariusschulz.com/blog/dynamic-import-expressions-in-typescript

看起来像returns一个你能抓住的承诺。

import("./widget").then(widget => {
  widget.render(container);
}).catch((err) => { console.log('error', err) });

我发现了为什么它被绑定到 tinyify。只需通过 browserify 删除它的使用即可解决问题。