Fix #169: fix resolve of external plugins

This commit is contained in:
Samy Pessé
2014-04-27 15:41:02 +02:00
parent 69431e1bbb
commit 36a67e4c91
3 changed files with 18 additions and 10 deletions
+1 -1
View File
@@ -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;
+16 -9
View File
@@ -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;
});
+1
View File
@@ -19,6 +19,7 @@
"tmp": "0.0.23",
"semver": "2.2.1",
"gaze": "0.6.4",
"resolve": "0.6.3",
"gitbook-plugin": "0.0.2",
"gitbook-plugin-mixpanel": "0.0.2",