繁体   English   中英

将Cordova插件JavaScript添加到项目时损坏

[英]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 prepareplatform/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM