导出到全局范围的函数未定义(webpack + babel)

时间:2019-06-18 16:04:13

标签: javascript webpack global babel

我有三个独立的库-

  1. 库A-托管共享代码,并使用babel将代码转换为/ lib文件夹
  2. 库B-使用libA(导入babel转译的代码),并使用webpack在dist文件夹(dist / index.js)中生成捆绑包。还将附加到窗口的全局函数“ myGlobalFunction”导出。
  3. 库C-同时使用A和全局“ myGlobalFunction”。

问题是,从lib C访问window.myGlobalFunction时,未打印。

在库B中,如果我从src /而不是从已转译的lib /中导入库A的内容,则我的问题会自动得到解决。

不确定为什么会这样。 另外,我通过设置

禁用了babel中的es模块转译
{modules: false} 

libA的babelrc中。

我有一个问题similar to this one,但是那里发布的解决方案也没有起作用,因为我需要通过直接在Window对象中查找来在另一个库中使用global。

所有库都是单独的npm软件包。

1 个答案:

答案 0 :(得分:0)

我发现问题是babel如何从LibA编译代码,尤其是包括async ... await的代码。

它使用预设的env和fb的再生器运行时,使用生成器将async..await转换为Promises。

我禁用了“ transform-regenerator”,“ transform-async-to-generator”插件,并使用fast-async plugin来完成工作,而我的问题已解决。

另一种方法是使用babel的transform runtime plugin来解决我的问题。

我怀疑主要问题是使用regeneratorRuntime的代码没有得到解决,对此不确定,但是解决方法解决了我的问题。