mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-19 09:06:03 +00:00
88 lines
2.4 KiB
JavaScript
88 lines
2.4 KiB
JavaScript
var npmi = require('npmi');
|
|
|
|
var pkg = require('../../package.json');
|
|
var DEFAULT_PLUGINS = require('../constants/defaultPlugins');
|
|
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');
|
|
});
|
|
}
|
|
|
|
|
|
/**
|
|
Install plugin requirements for a book
|
|
|
|
@param {Book}
|
|
@return {Promise<Number>}
|
|
*/
|
|
function installPlugins(book) {
|
|
var logger = book.getLogger();
|
|
var config = book.getConfig();
|
|
var plugins = config.getPluginDependencies();
|
|
|
|
// Remove default plugins
|
|
// (only if version is same as installed)
|
|
plugins = plugins.filterNot(function(plugin) {
|
|
return (
|
|
// Disabled plugin
|
|
!plugin.isEnabled() ||
|
|
|
|
// Or default one installed in GitBook itself
|
|
(DEFAULT_PLUGINS.includes(plugin.getName()) &&
|
|
plugin.getVersion() === pkg.dependencies[plugin.getNpmID()])
|
|
);
|
|
});
|
|
|
|
if (plugins.size == 0) {
|
|
logger.info.ln('nothing to install!');
|
|
return Promise();
|
|
}
|
|
|
|
logger.info.ln('installing', plugins.size, 'plugins using npm@' + npmi.NPM_VERSION);
|
|
|
|
return Promise.forEach(plugins, function(plugin) {
|
|
return installPlugin(book, plugin);
|
|
})
|
|
.thenResolve(plugins.size);
|
|
}
|
|
|
|
module.exports = installPlugins;
|