redrom
redrom

Reputation: 11642

Cordova how to install missing plugins after checkout project from repo?

I just cloned repository of the cordova app, but in .gitignore file added dir /plugins.

How can i install these missing plugins? U tried to find any config file where used plugins are saved, but without luck.

Many thanks for any advice.

Upvotes: 6

Views: 8371

Answers (4)

Sunny Drall
Sunny Drall

Reputation: 924

You can use

ionic cordova prepare <platform>

It will give you the list of plugins that are not installed with error message.

Upvotes: 1

Matt McMinn
Matt McMinn

Reputation: 16291

cordova prepare seemed to do the trick for me. After cloning my repository I was getting a "No platforms added to this project" error when running cordova requirements, even though the platforms were listed in the config.xml. Running cordova prepare filled out the plugins directories, allowingcordova requirements to run.

Upvotes: 6

TeChn4K
TeChn4K

Reputation: 2405

You can use ionic state to manage plugins and plateforms.

https://github.com/driftyco/ionic-cli#ionic-state


Read package.json and install listed plugins / plateforms :

ionic state restore

Save current plugins / platforms to the package.json :

ionic state save

Remove everything ! (including the default Ionic plugins ...) :

ionic state clear

Remove everything and bring back what you have specified in your package.json :

ionic state reset

Upvotes: 15

aorfevre
aorfevre

Reputation: 5064

If you added the add_plugin & remove plugin hooks, your package.json shall have a cordovaPlugins list.

If yes, then, the solution that i used is to remove the platform and add it again to fetch for all plugins

cordova platform remove android
cordova platform add android

here are the needed hooks

hooks/after_plugin_add/010_register_plugin.js

#!/usr/bin/env node
/**
 * Push plugins to cordovaPlugins array after_plugin_add
 */
var fs = require('fs');
var packageJSON = require('../../package.json');

packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || [];
process.env.CORDOVA_PLUGINS.split(',').forEach(function (plugin) {
  if(packageJSON.cordovaPlugins.indexOf(plugin) == -1) {
    packageJSON.cordovaPlugins.push(plugin);
  }
});

fs.writeFileSync('package.json', JSON.stringify(packageJSON, null, 2));

hooks/after_plugin_rm/010_deregister_plugin.js

#!/usr/bin/env node
/**
     * Remove plugins from cordovaPlugins array after_plugin_rm
     */
    var fs = require('fs');
    var packageJSON = require('../../package.json');

    packageJSON.cordovaPlugins = packageJSON.cordovaPlugins || [];

    process.env.CORDOVA_PLUGINS.split(',').forEach(function (plugin) {
      var index = packageJSON.cordovaPlugins.indexOf(plugin);
      if (index > -1) {
        packageJSON.cordovaPlugins.splice(index, 1);
      }
    });

    fs.writeFile('package.json', JSON.stringify(packageJSON, null, 2));

hooks/after_platform_add/010_install_plugins.js

#!/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 = require('../../package.json');
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);
  });
});

One other solution is to add a task for plugin installation as described on this page : http://jbavari.github.io/blog/2014/06/24/managing-cordova-plugins-with-package-dot-json-and-hooks/

Upvotes: 1

Related Questions