如何在Cordova插件中包含npm依赖项

时间:2018-04-11 07:45:51

标签: javascript cordova typescript node-modules apache-cordova

我目前正在为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

我不知道如何解决这个问题,任何想法?

  

注意:源代码是正在进行的工作,可能会有更改或错误。

1 个答案:

答案 0 :(得分:0)

使用 webpack 捆绑模块解决了空对象问题,并在我的 webpack 配置中将 libraryTarget 设置为 'window'

来自webpack docs

<块引用>

libraryTarget: 'window' - 入口点的返回值将使用 output.library 值分配给 window 对象。

如果没有此设置,捆绑脚本将无法以可以从我的插件中读取的方式导出。我认为这是因为当 Cordova 加载 JS 时,它用另一个函数包装它,这防止了脚本在加载时对窗口对象的隐式分配。此外,由于我的捆绑脚本实际上并未导出任何内容,因此 Cordova 不会从 clobbers 标记中选取任何内容分配给 window 对象。

请注意,使用此设置,您也可以删除 clobbers 标签。