【问题标题】:How to detect if script is running in a module?如何检测脚本是否在模块中运行?
【发布时间】:2019-03-21 10:53:56
【问题描述】:

我有一个程序为不支持网络工作者的浏览器提供后备。我这样做的原因是因为我想将它部署到 cocoon 的 canvas+,它不支持 web worker。非 web worker 代码可以很好地访问脚本“mountainNoise.js”,因为它使用 ES6 导入和导出,但是当 worker 通过“importScripts()”导入脚本时,它会抛出错误,因为导出声明只能出现在模块中。

有没有办法检测代码是否在模块中运行?我主要关心的是复制文件以支持这两个版本,但这很荒谬,因为一行代码占用了更多内存。

【问题讨论】:

  • 看起来像工人don't support modules yet。至于检测,我会检测错误而不是模块化,所以 try/catch 也会处理模块化的新问题。

标签: javascript web-worker es6-modules


【解决方案1】:

问题是,这是语言语义的基础,重复可以 成为答案。我可以建议尝试捕捉。我知道这不是一个好的解决方案,但可能比复制更好。

【讨论】:

  • 尝试并捕获不起作用。当使用 export 关键字执行 try 时,错误仍然会停止脚本执行,它会停止一切:(
【解决方案2】:

我不确定这是否适用于 web worker,但它是希望同时支持 node.js 和浏览器的 js 库中的常见模式。

if (
  typeof module !== 'undefined' &&
  typeof module.exports !== 'undefined'
) {
  module.exports = MyLib
  console.log('module.exports exists, import/export should be supported')
} else {
  window.MyLib = MyLib
  console.log('in a browser')
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2020-07-02
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多