Cordova 插件 javascript 在添加到项目时损坏
Cordova plugin javascript gets corrupted when added to project
我写了一个小的 Cordova 插件,当添加到另一个 Cordova 项目时会损坏。这个插件基本上是原生 iOS 核心数据包裹在 Javascript 中。公开函数的 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 文件而不改变它。
从模块化的角度来看,在原始 JS 文件中不调用 define
实际上是有道理的,因为该文件不需要知道它所在的模块(插件)的名称。只有当该 JS 嵌入到具有 name/identifier 的插件中时,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
调用。
我写了一个小的 Cordova 插件,当添加到另一个 Cordova 项目时会损坏。这个插件基本上是原生 iOS 核心数据包裹在 Javascript 中。公开函数的 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 文件而不改变它。
从模块化的角度来看,在原始 JS 文件中不调用 define
实际上是有道理的,因为该文件不需要知道它所在的模块(插件)的名称。只有当该 JS 嵌入到具有 name/identifier 的插件中时,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
调用。