【问题标题】:How to catch thrown error from require using Typescript?如何使用 Typescript 从 require 中捕获抛出的错误?
【发布时间】:2020-08-31 04:37:36
【问题描述】:

我正在尝试将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;

【问题讨论】:

    标签: typescript import try-catch optional require


    【解决方案1】:

    不知道为什么你不能捕捉到错误,但也许可以试试 typescript 导入? https://mariusschulz.com/blog/dynamic-import-expressions-in-typescript

    看起来它返回了一个你可以抓住的承诺。

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

    【讨论】:

    • 嗨。我试过你问的。我应该准确地说我正在使用 browserify 和 tsify 在浏览器中进行测试。也许这与他们转换代码的方式有关。这是我使用的代码:let browser: any = false; import("webextension-polyfill-ts") .then((Browser) => { browser = Browser; }) .catch((e) => {}); export default browser;
    • 这可能不太合适,因为导出是同步的。您可以尝试导出承诺。
    • 哦!你说得对,我没有考虑。但无论如何,它不会改变结果。 export const browser: any = import("webextension-polyfill-ts") .then((browser) => browser) .catch((e) => { console.log("a"); return false; }); 仍然抛出错误,没有被捕获。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 2015-12-29
      • 2023-03-28
      • 1970-01-01
      • 2020-08-24
      • 2011-01-25
      • 2018-01-21
      相关资源
      最近更新 更多