如何检测脚本是否在模块中运行?

时间:2018-10-16 20:12:41

标签: javascript web-worker es6-modules

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我不确定这是否可以在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')
}