cordova/exec 在流星项目中失败

Posted

技术标签:

【中文标题】cordova/exec 在流星项目中失败【英文标题】:cordova/exec fails within meteor project 【发布时间】:2021-09-28 02:12:24 【问题描述】:

使用plugman 构建Cordova 插件后,将其安装到meteor 2.3.2 并运行meteor run android-build,插件中出现以下错误:

Unable to resolve some modules:

  "cordova/exec" in ~/MeteorApp/MyPlugin/www/MyPlugin.js (web.browser)

错误行来自生成 MyPlugin.js 中的第 2 行

// ~/MeteorApp/MyPlugin/www/MyPlugin.js


// I added this check for cordova myself

if (cordova && cordova.exec ) 
    var exec = require('cordova/exec');
    exports.coolMethod = function (arg0, success, error) 
        exec(success, error, 'MyPlugin', 'coolMethod', [arg0]);
    ;


我的meteor结构包含app路径下的plugin文件夹

我使用meteor add cordova:my.plugin.id@file://path/to/plugin/project安装了这个包

Cordova 版本 10.0.8

我有以下插件结构:

pluginDir/
   src/
      android/
         MyPlugin.java
   www/
      MyPlugin.js
   package.json
   plugin.xml

我已经在 Cordova 应用程序中测试了插件,效果很好。

我敢打赌,这里的问题是流星如何暴露内部 Cordova 对象。

【问题讨论】:

【参考方案1】:

解决方案

Meteor 已经包装了cordova 对象,因此我无需在/www 插件定义中导入cordova/exec,我只需要使用cordova.exec('my logic goes here')

上面是用plugman 搭建的,/www 文件夹和文件以及上面的代码都会自动生成。

上面的代码在 Cordova 中是有效的,但是在 Meteor 中这个逻辑失败了。

额外cmets

此插件仅需要 Android 支持,cordova.exec() 逻辑已移至 Meteor api 方法中。

由于这个仅限 Android 的要求,/www 文件夹和引用已被删除。

未来可能会重新引入 /www 文件夹,以便为 Web 使用场景定义一个很好的后备方案,但它不太可能用于我们的内部插件。

【讨论】:

以上是关于cordova/exec 在流星项目中失败的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap 通信原理

在部署流星应用程序时如何解决“使用fiber@2.0.0安装脚本失败”错误?

cordova.exec 参数中的奇怪行为

使 cordova.exec 同步

向 cordova.exec 函数添加额外的参数

无法在流浪盒上创建工作流星.js 项目