Плагины JavaScript Cordova

Я начинаю понимать, как Cordova работает внутри все больше и больше; одна вещь, с которой я продолжаю бороться, - это формат плагинов 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;
}());

однако 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;

может быть, это потому, что у меня нет никаких знаний об этом require библиотека - но я не врубаюсь? Это кажется мне совершенно чуждым, с точки зрения JavaScript.

что такое модули, что такое cordova/[...] синтаксис и что он указывает. Где определены эти другие модули cordova (это правильная терминология) и где modules откуда?

и наконец, что значит modules.export делать? Я пытаюсь понять <js-module> тег plugin.xml и <clobbers> тег, но это сдерживает меня, я думаю.

Я понимаю, что когда Cordova строит проект, он вставляет cordova.define окружающие плагин.

может быть, по крайней мере кто-то может уточнить? Спасибо!

1 ответов


функции require и exec являются методами объекта cordova. При установке плагина он получает обернутую функцию, которая дает доступ к объекту cordova. Эти звонки на самом деле Кордова.требуют и Кордова.exec

вот пример файла JS плагина до и после установки:

перед:

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

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

module.exports = VideoPlayer;

после:

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;

});

кроме того, чтобы ответить о настройке конфигурации, команда превосходит обеспечивает пространство имен вашего объект плагина. Из моего плагина:

<js-module src="www/VideoPlayer.js" name="VideoPlayer">
    <clobbers target="VideoPlayer" />
</js-module>

это указывает имя моего JS-файла и пространство имен объектов, используемое для вызова моего плагина в JS.