我写了一个小的Cordova插件,当添加到另一个Cordova项目时会被破坏。这个插件基本上是用Javascript包装的原生iOS核心数据。公开函数的Javascript文件是被破坏的文件。
原始文件如下:
cordova.define("com.aga.cordova.plugin.ioscoredata.plugincoredata", function(require, exports, module) { var exec = require('cordova/exec'),
cordova = require('cordova');
var plugincoredata = {
saveJSON: function(successCallback, errorCallback, tableName, json) {
exec(successCallback, errorCallback, "PluginCoreData", "saveJSON", [tableName, json]);
},
loadJSON: function(successCallback, errorCallback, tableName, extraColumns) {
exec(successCallback, errorCallback, "PluginCoreData", "loadJSON", [tableName, extraColumns]);
},
clear: function(successCallback, errorCallback, tableName) {
exec(successCallback, errorCallback, "PluginCoreData", "clear", [tableName]);
}
};
module.exports = plugincoredata;
});
将文件正确复制到项目plugins
文件夹中,但由于某种原因在复制到platform/ios/ProjectName/www/plugin/PluginName/js/plugincoredata.js
时被错误地修改(运行cordova prepare
后也是如此)。
该文件如下所示:
cordova.define("com.aga.cordova.plugin.ioscoredata.plugincoredata", function(require, exports, module) {
cordova.define("com.aga.cordova.plugin.ioscoredata.plugincoredata", function(require, exports, module) { var exec = require('cordova/exec'),
cordova = require('cordova');
var plugincoredata = {
saveJSON: function(successCallback, errorCallback, tableName, json) {
exec(successCallback, errorCallback, "PluginCoreData", "saveJSON", [tableName, json]);
},
loadJSON: function(successCallback, errorCallback, tableName, extraColumns) {
exec(successCallback, errorCallback, "PluginCoreData", "loadJSON", [tableName, extraColumns]);
},
clear: function(successCallback, errorCallback, tableName) {
exec(successCallback, errorCallback, "PluginCoreData", "clear", [tableName]);
}
};
module.exports = plugincoredata;
});
});
如您所见,定义是重复的。
知道发生了什么事吗?我的理解是Cordova应该只是复制javascript文件而不改变它。
答案 0 :(得分:0)
从模块化的角度来看,实际上有意义的是原始JS文件中没有调用define
,因为该文件不需要知道它所在的模块(插件)的名称。只有当它JS嵌入在一个插件中,该插件有一个名称/标识符,Cordova需要定义它,将它连接到实际的插件。
如果您查看Cordova提供的插件,您将看到相同的模式,JS文件本身不会define
,只有当它们被添加到平台时才会添加define
调用。参见例如
<root>/plugins/org.apache.cordova.device/www/devices.js
并将其与
进行比较<root>/platforms/ios/www/plugins/org.apache.cordova.device/www/devices.js
后者有define
电话。