在 ios 上使用 ionic/cordova 添加平台期间未安装的插件

Posted

技术标签:

【中文标题】在 ios 上使用 ionic/cordova 添加平台期间未安装的插件【英文标题】:Plugins not installing during platform add with ionic/cordova on ios 【发布时间】:2015-07-06 12:27:14 【问题描述】:

当在 ionic 中添加一个带有已在 package.json 中定义的插件的平台时,会安装一组随机插件并在 plugins/ios.json 中引用。

作为一个具体的例子,我的package.json 包含以下内容:

cordovaPlugins: [
    "com.danielcwilson.plugins.googleanalytics",
    "com.ionic.keyboard",
    "cordova-plugin-console",
    "cordova-plugin-device",
    "uk.co.whiteoctober.cordova.appversion",
    "com.paypal.cordova.mobilesdk",
    "nl.x-services.plugins.flashlight",
    "cordova-plugin-inappbrowser",
    "https://github.com/wildabeast/BarcodeScanner"
]

在第一次运行时,plugins/ios.json 包含:

com.danielcwilson.plugins.googleanalytics
com.paypal.cordova.mobilesdk
com.phonegap.plugins.barcodescanner
cordova-plugin-console
nl.x-services.plugins.flashlight
uk.co.whiteoctober.cordova.appversion

如果我清除平台和插件文件夹并重新添加平台,那么在第二次运行时我会得到:

com.ionic.keyboard
com.paypal.cordova.mobilesdk
cordova-plugin-console
cordova-plugin-device
cordova-plugin-inappbrowser
nl.x-services.plugins.flashlight
uk.co.whiteoctober.cordova.appversion

等等。

ionic platform add ios 步骤中,我确实看到所有插件都被添加了;但是偶尔Running command: /path/to/project/hooks/after_platform_add/010_install_plugins.js 步骤不会运行。

有没有可靠的方法来安装插件?

我正在使用:

| What    | Version |
| :------ | :------ |
| node    | 0.10.39 |
| cordova | 5.1.1   |
| ionic   | 1.6.1   |

010_install_plugins.sh 的内容按要求:

#!/usr/bin/env node

/**
 * Install all plugins listed in package.json
 * https://raw.githubusercontent.com/diegonetto/generator-ionic/master/templates/hooks/after_platform_add/install_plugins.js
 */
var exec = require('child_process').exec;
var path = require('path');
var sys = require('sys');

var packageJSON = null;

try 
  packageJSON = require('../../package.json');
 catch(ex) 
  console.log('\nThere was an error fetching your package.json file.')
  console.log('\nPlease ensure a valid package.json is in the root of this project\n')
  return;


var cmd = process.platform === 'win32' ? 'cordova.cmd' : 'cordova';
// var script = path.resolve(__dirname, '../../node_modules/cordova/bin', cmd);

packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || [];
packageJSON.cordovaPlugins.forEach(function (plugin) 
  exec('cordova plugin add ' + plugin, function (error, stdout, stderr) 
    sys.puts(stdout);
  );
);

这是 ionic 的默认设置。

【问题讨论】:

你能显示010_install_plugins.js吗 cordova plugin add cordova-plugin-console ?你试过这个吗? 【参考方案1】:

事实证明,该错误出在 Ionic 本身。

挂钩文件正在异步运行所有插件安装,这意味着文件被同时写入,因此更改会丢失。

我已向ionic-cli 提交了一个拉取请求以解决问题here。更改是替换:

 packageJSON.cordovaPlugins.forEach(function (plugin) 
   exec('cordova plugin add ' + plugin, function (error, stdout, stderr) 
     sys.puts(stdout);
   );
);

与:

function installNextPlugin() 
    var curPlugin = packageJSON.cordovaPlugins.shift();
    if (curPlugin) 
        exec('cordova plugin add ' + curPlugin, function(err, stdout, stderr) 
            sys.puts(stdout);
            sys.puts(stderr);
        )
            .on("exit", function(code) 
                if (code) 
                    console.log("'cordova plugin add " + curPlugin + "' failed with code '" + code + "'");
                    process.exit(code);
                 else 
                    installNextPlugin();
                
            );
    


installNextPlugin();

010_install_plugins.js.

【讨论】:

太棒了,最近几周给我带来了很多麻烦,谢谢!【参考方案2】:

这是我之前遇到的问题,也许你已经做过,但值得一试:chmod +x 010_install_plugins.js

【讨论】:

谢谢,但 ionic 创建了钩子并让它们对我可执行。

以上是关于在 ios 上使用 ionic/cordova 添加平台期间未安装的插件的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 上使用 ionic/cordova 添加平台期间未安装的插件

升级到 Ionic 1.3 后,Ionic/Cordova 联系人插件在 iOS 上返回 Invalid Date

Ionic / Cordova / Phonegap:有没有办法在iOS和Android上禁用表情符号键盘?

ionic/cordova 应用程序中 IOS 10.3.3 中的屏幕闪烁问题

iOS 9 Ionic Cordova 应用程序在 iPhone 上崩溃;在 iPad 上工作

Google地图自动填充功能在Cordova iOS上使用WKWebView失败