summaryrefslogtreecommitdiffstats
path: root/lib/plugins/installPlugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plugins/installPlugin.js')
-rw-r--r--lib/plugins/installPlugin.js47
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/plugins/installPlugin.js b/lib/plugins/installPlugin.js
new file mode 100644
index 0000000..37852df
--- /dev/null
+++ b/lib/plugins/installPlugin.js
@@ -0,0 +1,47 @@
+var npmi = require('npmi');
+
+var Promise = require('../utils/promise');
+var resolveVersion = require('./resolveVersion');
+
+/**
+ Install a plugin for a book
+
+ @param {Book}
+ @param {PluginDependency}
+ @return {Promise}
+*/
+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');
+ });
+}
+
+module.exports = installPlugin;