Плагины 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.