diff options
author | Samy Pessé <samypesse@gmail.com> | 2014-04-27 15:41:02 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2014-04-27 15:41:02 +0200 |
commit | 36a67e4c91efc92476687ab20f43a62259580ecd (patch) | |
tree | 3818ff815ee343b606e916a297f8bc2d1d8f40fd /lib | |
parent | 69431e1bbb0381a6eeeb22010d73ccf61105db6f (diff) | |
download | gitbook-36a67e4c91efc92476687ab20f43a62259580ecd.zip gitbook-36a67e4c91efc92476687ab20f43a62259580ecd.tar.gz gitbook-36a67e4c91efc92476687ab20f43a62259580ecd.tar.bz2 |
Fix #169: fix resolve of external plugins
Diffstat (limited to 'lib')
-rw-r--r-- | lib/generate/generator.js | 2 | ||||
-rw-r--r-- | lib/generate/plugin.js | 25 |
2 files changed, 17 insertions, 10 deletions
diff --git a/lib/generate/generator.js b/lib/generate/generator.js index e303345..144af23 100644 --- a/lib/generate/generator.js +++ b/lib/generate/generator.js @@ -19,7 +19,7 @@ BaseGenerator.prototype.callHook = function(name) { BaseGenerator.prototype.loadPlugins = function() { var that = this; - return Plugin.fromList(this.options.plugins) + return Plugin.fromList(this.options.plugins, this.options.input) .then(function(_plugins) { that.plugins = _plugins; diff --git a/lib/generate/plugin.js b/lib/generate/plugin.js index 202d4df..c5f4187 100644 --- a/lib/generate/plugin.js +++ b/lib/generate/plugin.js @@ -4,13 +4,15 @@ var semver = require("semver"); var path = require("path"); var url = require("url"); var fs = require("./fs"); +var resolve = require('resolve'); var pkg = require("../../package.json"); var RESOURCES = ["js", "css"]; -var Plugin = function(name) { +var Plugin = function(name, root) { this.name = name; + this.root = root; this.packageInfos = {}; this.infos = {}; @@ -20,16 +22,21 @@ var Plugin = function(name) { "gitbook-"+name, name, ], function(_name) { - if (this.load(_name)) return false; - }.bind(this)); + if (this.load(_name, __dirname)) return false; + if (this.load(_name, path.resolve(root))) return false; + }, this); }; // Load from a name -Plugin.prototype.load = function(name) { +Plugin.prototype.load = function(name, baseDir) { try { - this.packageInfos = require(name+"/package.json"); - this.infos = require(name); + var res = resolve.sync(name+"/package.json", { basedir: baseDir }); + + this.baseDir = path.dirname(res); + this.packageInfos = require(res); + this.infos = require(resolve.sync(name, { basedir: baseDir })); this.name = name; + return true; } catch (e) { return false; @@ -63,7 +70,7 @@ Plugin.prototype.isValid = function() { // Resolve file path Plugin.prototype.resolveFile = function(filename) { - return path.resolve(path.dirname(require.resolve(this.name)), filename); + return path.resolve(this.baseDir, filename); }; // Resolve file path @@ -121,12 +128,12 @@ Plugin.normalizeNames = function(names) { }; // Extract data from a list of plugin -Plugin.fromList = function(names) { +Plugin.fromList = function(names, root) { var failed = []; // Load plugins var plugins = _.map(names, function(name) { - var plugin = new Plugin(name); + var plugin = new Plugin(name, root); if (!plugin.isValid()) failed.push(name); return plugin; }); |