[英]Cordova plugin javascript gets corrupted when added to project
我写了一个小的Cordova插件,将其添加到另一个Cordova项目后会损坏。 这个插件基本上是用Java语言包装的本地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
后platform/ios/ProjectName/www/plugin/PluginName/js/plugincoredata.js
发生同样的情况)。 该文件看起来像这样:
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文件而不对其进行更改。
从模块化的角度来看,在原始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
调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.