mirror of
https://github.com/GitbookIO/gitbook.git
synced 2026-09-20 17:43:24 +00:00
Fix #169: fix resolve of external plugins
This commit is contained in:
@@ -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
@@ -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;
|
||||
});
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user