簡體   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