Cordova JavaScript插件

kel*_*dar 6 javascript plugins cordova cordova-3

我开始明白科尔多瓦内部工作的方式越来越多; 我继续努力的一件事是JavaScript插件的格式.

我习惯于按如下方式编写JavaScript(据我所知,这是标准惯例):

(function () {
    var version = "EXAMPLE",
        v1,
        v2,
        v3
        res;

    function somePrivateFunction(successCallback, errorCallback) {
        someOtherPrivateFunction(sc, ec);
    }

    function someOtherPrivateFunction(successCallback, errorCallback) {
        cordova.exec(sc, ec, 'SomeService', 'SomeMethod', [args]);
    }

    res = {
        VERSION: version,
        doSomething: function (sc, ec) {
            somePrivateFunction(sc, ec);    
        }
    }

    window.myPlugin = res;
}());
Run Code Online (Sandbox Code Playgroud)

但是,Cordova使用的格式我完全不熟悉.我认为(我在这里和那里只听说过这个术语)它使用了一些东西require(通过大多数插件顶部的声明来判断).

我经常在官方Cordova插件中看到的格式如下:

    var argscheck = require('cordova/argscheck'),
    utils = require('cordova/utils'),
    exec = require('cordova/exec');

var myPlugin = function () {

}

myPlugin.doSomething = function(successCallback, errorCallback) {
    exec(successCallback, errorCallback, 'SomeService', 'SomeMethod', [args]);
}

myPlugin.doSomethingElse = function(successCallback, errorCallback) {
    exec(successCallback, errorCallback, 'SomeService', 'SomeOtherMethod', [args]);
}

modules.export = myPlugin;
Run Code Online (Sandbox Code Playgroud)

也许是因为我对这个require图书馆没有任何了解- 但我不明白?就JavaScript而言,这对我来说似乎完全陌生.

什么是模块,cordova/[...]语法是什么以及它表示什么.这些其他cordova模块在哪里定义(是正确的术语),它modules来自哪里?

最后,做了modules.export什么?我试图理解<js-module>标签plugin.xml<clobbers>标签,但这让我想起了.

我知道当Cordova构建项目时,它会插入cordova.define周围的插件.

也许至少有人可以澄清一下?谢谢!

Daw*_*don 13

require和exec函数是cordova对象的方法.当您安装插件时,它会被包含在函数中,以便访问cordova对象.那些电话实际上是cordova.require和cordova.exec

以下是安装前后插件js文件的示例:

之前:

var exec = require("cordova/exec");

var VideoPlayer = {
    play: function(url) {
        exec(null, null, "VideoPlayer", "playVideo", [url]);
    }
};

module.exports = VideoPlayer;
Run Code Online (Sandbox Code Playgroud)

后:

cordova.define("com.dawsonloudon.videoplayer.VideoPlayer", function(require, exports, module) {

    var exec = require("cordova/exec");

    var VideoPlayer = {
        play: function(url) {
            exec(null, null, "VideoPlayer", "playVideo", [url]);
        }
    };

    module.exports = VideoPlayer;

});
Run Code Online (Sandbox Code Playgroud)

另外,要回答有关配置设置的问题,clobbers命令可以保护插件对象的名称空间.从我的插件:

<js-module src="www/VideoPlayer.js" name="VideoPlayer">
    <clobbers target="VideoPlayer" />
</js-module>
Run Code Online (Sandbox Code Playgroud)

这是说明我的JS文件的名称,以及用于在JS中调用我的插件的对象命名空间.