我目前正在为Cordova实现名为core-cordova
(source code)的插件,该插件还具有来自其他NPM包的依赖关系。
问题是在使用
在我的应用中安装插件之后$ cordova plugin add @aerogearservices/core-cordova
我在控制台上出现此错误:
未找到模块@ aerogearservices / core未找到
我认为我必须以某种方式将这种依赖性捆绑到插件JS文件中,但我还没有发现如何。到目前为止,我已尝试使用Browserify
将所有内容捆绑到dist/core-cordova.js
中,并在Plugin.xml
中将其定义为:
<js-module src="dist/core-cordova.js" name="MetricsService">
<clobbers target="cordova.aerogear" />
</js-module>
使用此方法不会引发任何错误,但aerogear
是一个空对象:
// Browser's dev console
> window.cordova.aerogear;
-> {}
> window.cordova.aerogear.MetricsService;
-> undefined
我不知道如何解决这个问题,任何想法?
注意:源代码是正在进行的工作,可能会有更改或错误。
答案 0 :(得分:0)
使用 webpack
捆绑模块解决了空对象问题,并在我的 webpack 配置中将 libraryTarget
设置为 'window'
。
来自webpack docs:
<块引用>libraryTarget: 'window'
- 入口点的返回值将使用 output.library 值分配给 window 对象。
如果没有此设置,捆绑脚本将无法以可以从我的插件中读取的方式导出。我认为这是因为当 Cordova 加载 JS 时,它用另一个函数包装它,这防止了脚本在加载时对窗口对象的隐式分配。此外,由于我的捆绑脚本实际上并未导出任何内容,因此 Cordova 不会从 clobbers
标记中选取任何内容分配给 window 对象。
请注意,使用此设置,您也可以删除 clobbers
标签。