function installPlugin(book, plugin) {
    var logger = book.getLogger();

    var installFolder = book.getRoot();
    var name = plugin.getName();
    var requirement = plugin.getVersion();

    logger.info.ln('');
    logger.info.ln('installing plugin "' + name + '"');

    // Find a version to install
    return resolveVersion(plugin)
    .then(function(version) {
        if (!version) {
            throw new Error('Found no satisfactory version for plugin "' + name + '" with requirement "' + requirement + '"');
        }

        logger.info.ln('install plugin "' + name +'" (' + requirement + ') from NPM with version', version);
        return Promise.nfcall(npmi, {
            'name': plugin.getNpmID(),
            'version': version,
            'path': installFolder,
            'npmLoad': {
                'loglevel': 'silent',
                'loaded': true,
                'prefix': installFolder
            }
        });
    })
    .then(function() {
        logger.info.ok('plugin "' + name + '" installed with success');
    });
}
function installPlugin(book, plugin) {
    var logger = book.getLogger();

    var installFolder = book.getRoot();
    var name = plugin.getName();
    var requirement = plugin.getVersion();

    logger.info.ln('');
    logger.info.ln('installing plugin "' + name + '"');

    // Find a version to install
    return resolveVersion(plugin)
    .then(function(version) {
        if (!version) {
            throw new Error('Found no satisfactory version for plugin "' + name + '" with requirement "' + requirement + '"');
        }

        logger.info.ln('install plugin "' + name +'" (' + requirement + ') from NPM with version', version);
        return Promise.nfcall(npmi, {
            'name': plugin.getNpmID(),
            'version': version,
            'path': installFolder,
            'npmLoad': {
                'loglevel': 'silent',
                'loaded': true,
                'prefix': installFolder
            }
        });
    })
    .then(function() {
        logger.info.ok('plugin "' + name + '" installed with success');
    });
}
function installPlugin ( book , plugin ) { var logger = book . getLogger ( ) ; var installFolder = book . getRoot ( ) ; var name = plugin . getName ( ) ; var requirement = plugin . getVersion ( ) ; logger . info . ln ( '' ) ; logger . info . ln ( 'installing plugin "' + name + '"' ) ; // Find a version to install return resolveVersion ( plugin ) . then ( function ( version ) { if ( ! version ) { throw new Error ( 'Found no satisfactory version for plugin "' + name + '" with requirement "' + requirement + '"' ) ; } logger . info . ln ( 'install plugin "' + name + '" (' + requirement + ') from NPM with version' , version ) ; return Promise . nfcall ( npmi , { 'name' : plugin . getNpmID ( ) , 'version' : version , 'path' : installFolder , 'npmLoad' : { 'loglevel' : 'silent' , 'loaded' : true , 'prefix' : installFolder } } ) ; } ) . then ( function ( ) { logger . info . ok ( 'plugin "' + name + '" installed with success' ) ; } ) ; }
Install a plugin for a book

@param {Book}
@param {PluginDependency}
@return {Promise}
Install a plugin for a book
Install a plugin from NPM