[英]How to include npm dependencies in your Cordova plugin
我目前正在为 Cordova 实现一个名为core-cordova
(源代码)的插件,它也依赖于另一个 NPM 包。
问题是在我的应用程序中安装插件后使用
$ cordova plugin add @aerogearservices/core-cordova
我在控制台上有这个错误:
未找到模块@aerogearservices/core 未找到
我想我必须以某种方式将此依赖项捆绑到插件 JS 文件中,但我还没有找到方法。 到目前为止,我已经尝试使用Browserify
将所有内容捆绑到一个dist/core-cordova.js
并在Plugin.xml
dist/core-cordova.js
其定义为:
<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
我不知道如何解决这个问题,有什么想法吗?
注意:源代码正在开发中,可能会有更改或错误。
使用webpack
捆绑模块解决了空对象问题,并在我的 webpack 配置中将libraryTarget
设置为'window'
。
来自webpack 文档:
libraryTarget: 'window'
- 入口点的返回值将使用 output.library 值分配给 window 对象。
如果没有此设置,捆绑脚本将无法以可以从我的插件中读取的方式导出。 我认为这是因为当 Cordova 加载 JS 时,它用另一个函数包装它,这防止了脚本在加载时对窗口对象的隐式分配。 此外,由于我的捆绑脚本实际上并未导出任何内容,因此 Cordova 不会从clobbers
标签中选取任何内容分配给 window 对象。
请注意,使用此设置,您也可以删除clobbers
标签。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.