summaryrefslogtreecommitdiffstats
path: root/lib/generate/plugin.js
diff options
context:
space:
mode:
authorSamy Pessé <samypesse@gmail.com>2014-11-30 14:46:21 +0100
committerSamy Pessé <samypesse@gmail.com>2014-11-30 14:46:21 +0100
commite36f274dbe2268e877521bcd8b636c5ed72b63d3 (patch)
treefe4aed85fea240c4231ed58312f2e82754fc59cd /lib/generate/plugin.js
parent2a88427e74d9f3af7db8e97cae64c2eaed8d2fef (diff)
downloadgitbook-e36f274dbe2268e877521bcd8b636c5ed72b63d3.zip
gitbook-e36f274dbe2268e877521bcd8b636c5ed72b63d3.tar.gz
gitbook-e36f274dbe2268e877521bcd8b636c5ed72b63d3.tar.bz2
Handle specific version for plugins
Diffstat (limited to 'lib/generate/plugin.js')
-rw-r--r--lib/generate/plugin.js59
1 files changed, 37 insertions, 22 deletions
diff --git a/lib/generate/plugin.js b/lib/generate/plugin.js
index 41831a7..5ca5e92 100644
--- a/lib/generate/plugin.js
+++ b/lib/generate/plugin.js
@@ -156,17 +156,16 @@ Plugin.prototype.copyAssets = function(out, options) {
// Install a list of plugin
Plugin.install = function(options) {
// Normalize list of plugins
- var plugins = Plugin.normalizeNames(options.plugins);
+ var plugins = Plugin.normalizeList(options.plugins);
- // Remove defaults plugins
- plugins = _.without.apply(null, [plugins].concat(Plugin.defaults));
-
- return _.reduce(plugins, function(prev, name) {
+ // Install plugins one by one
+ return _.reduce(plugins, function(prev, plugin) {
return prev.then(function() {
- var fullname = "gitbook-plugin-"+name;
- console.log("Install plugin", name, "from npm ("+fullname+")");
+ var fullname = "gitbook-plugin-"+plugin.name;
+ console.log("Install plugin", plugin.name, "from npm ("+fullname+") with version", (plugin.version || "*"));
return Q.nfcall(npmi, {
'name': fullname,
+ 'version': plugin.version,
'path': options.input,
'npmLoad': {
'loglevel': 'silent',
@@ -178,33 +177,49 @@ Plugin.install = function(options) {
}, Q());
};
-// Normalize a list of plugin name to use
-Plugin.normalizeNames = function(names) {
+// Normalize a list of plugins to use
+Plugin.normalizeList = function(plugins) {
// Normalize list to an array
- names = _.isString(names) ? names.split(",") : (names || []);
+ plugins = _.isString(plugins) ? plugins.split(",") : (plugins || []);
+
+ // Divide as {name, version} to handle format like "myplugin@1.0.0"
+ plugins = _.map(plugins, function(plugin) {
+ var parts = plugin.split("@");
+ return {
+ 'name': parts[0],
+ 'version': parts[1] // optional
+ }
+ });
// List plugins to remove
- var toremove = _.chain(names)
- .filter(function(name) {
- return name.length > 0 && name[0] == "-";
+ var toremove = _.chain(plugins)
+ .filter(function(plugin) {
+ return plugin.name.length > 0 && plugin.name[0] == "-";
})
- .map(function(name) {
- return name.slice(1);
+ .map(function(plugin) {
+ return plugin.name.slice(1);
})
.value();
// Merge with defaults
- names = _.chain(names)
- .concat(Plugin.defaults)
+ plugins = _.chain(plugins)
+ .concat(_.map(Plugin.defaults, function(plugin) {
+ return { 'name': plugin }
+ }))
.uniq()
.value();
- // Remove plugins starting with
- names = _.filter(names, function(name) {
- return !_.contains(toremove, name) && !(name.length > 0 && name[0] == "-");
+ // Build final list
+ plugins = _.filter(plugins, function(plugin) {
+ return !_.contains(toremove, plugin.name) && !(plugin.name.length > 0 && plugin.name[0] == "-");
});
- return names;
+ return plugins;
+};
+
+// Normalize a list of plugin name to use
+Plugin.normalizeNames = function(plugins) {
+ return _.pluck(Plugin.normalizeList(plugins), "name");
};
// Extract data from a list of plugin
@@ -302,7 +317,7 @@ Plugin.fromList = function(names, root, generator, options) {
});
};
-// Default plugins
+// Default plugins added to each books
Plugin.defaults = [
"mathjax"
];