Cordova插件javascript在添加到项目时会被破坏

时间:2015-01-19 03:24:43

标签: javascript cordova cordova-plugins

我写了一个小的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文件而不改变它。

1 个答案:

答案 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电话。