From c9a2ab660e5aa588ec6e9699b198dcaaab8976dc Mon Sep 17 00:00:00 2001 From: Eran Hammer Date: Tue, 26 Feb 2013 09:28:41 -0800 Subject: [PATCH 1/2] Allow absolute paths for composer config in cli --- bin/hapi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/hapi b/bin/hapi index c684b728d..fdac7948b 100755 --- a/bin/hapi +++ b/bin/hapi @@ -9,7 +9,7 @@ var argv = Optimist.usage('Usage: $0 -c config.json') var options = null; try { - options = require(process.cwd() + '/' + argv.c); + options = require(argv.c[0] !== '/' ? process.cwd() + '/' + argv.c : argv.c); } catch (err) { console.log('Failed loading configuration file: ' + argv.c + ' (' + err.message + ')'); From 0a01ca628e0fe990699253cddc71a87416632feb Mon Sep 17 00:00:00 2001 From: Eran Hammer Date: Tue, 26 Feb 2013 09:50:11 -0800 Subject: [PATCH 2/2] Configurable node_modules path in pack require --- bin/hapi | 12 ++++++++---- lib/composer.js | 10 ++++++---- lib/pack.js | 12 ++++++++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/bin/hapi b/bin/hapi index fdac7948b..0faa272a1 100755 --- a/bin/hapi +++ b/bin/hapi @@ -3,20 +3,24 @@ var Optimist = require('optimist'); var Hapi = require('../'); -var argv = Optimist.usage('Usage: $0 -c config.json') +var argv = Optimist.usage('Usage: $0 -c config.json [-p node_modules_path]') .demand(['c']) .argv; -var options = null; +var config = null; try { - options = require(argv.c[0] !== '/' ? process.cwd() + '/' + argv.c : argv.c); + config = require(argv.c[0] !== '/' ? process.cwd() + '/' + argv.c : argv.c); } catch (err) { console.log('Failed loading configuration file: ' + argv.c + ' (' + err.message + ')'); process.exit(1); } -var composer = new Hapi.Composer(options); +var packOptions = { + requirePath: argv.p || null +}; + +var composer = new Hapi.Composer(config, packOptions); composer.compose(function (err) { Hapi.utils.assert(!err, 'Failed loading plugins: ' + (err && err.message)); diff --git a/lib/composer.js b/lib/composer.js index 3cb65208b..6e1c53330 100755 --- a/lib/composer.js +++ b/lib/composer.js @@ -11,7 +11,7 @@ var Utils = require('./utils'); var internals = {}; /* -var options = [{ +var config = [{ servers: { ren: { port: 8001, @@ -43,15 +43,17 @@ var options = [{ }]; */ -exports = module.exports = internals.Composer = function (options) { +exports = module.exports = internals.Composer = function (config, packOptions) { - this.settings = Utils.clone(options); + this.settings = Utils.clone(config); if (this.settings instanceof Array === false) { this.settings = [this.settings]; } this.packs = []; + this.packOptions = Utils.clone(packOptions); + return this; }; @@ -67,7 +69,7 @@ internals.Composer.prototype.compose = function (callback) { Utils.assert(set.servers && Object.keys(set.servers).length, 'Pack missing servers definition'); - var pack = new Pack(); + var pack = new Pack(self.packOptions); Object.keys(set.servers).forEach(function (serverName) { // Load servers diff --git a/lib/pack.js b/lib/pack.js index 62375887d..c615f2c73 100755 --- a/lib/pack.js +++ b/lib/pack.js @@ -21,13 +21,21 @@ internals.defaultPermissions = { }; -exports = module.exports = internals.Pack = function () { +exports = module.exports = internals.Pack = function (options) { + + options = options || {}; + + Utils.assert(!options || !options.requirePath || options.requirePath[0] === '/', 'Pack option \'requirePath\' must be an absolute path'); this.servers = []; // List of all pack server members this.labels = {}; // Server [names] organized by labels this.names = {}; // Servers indexed by name this.events = new Events.EventEmitter(); // Consolidated subscription to all servers' events + this.settings = { + requirePath: options.requirePath || process.cwd() + '/node_modules' + }; + return this; }; @@ -332,7 +340,7 @@ internals.Pack.prototype._require = function (name, permissions, options, callba itemName = callerPath + '/' + itemName; } else if (itemName[0] !== '/') { - itemName = process.cwd() + '/node_modules/' + itemName; + itemName = self.settings.requirePath + '/' + itemName; } var plugin = null;