compound-ex4
Version:
Compound-ex4 - MVC framework for NodeJS (ExpressJs 4 version), fork compoundjs(https://github.com/1602/compound)
77 lines (63 loc) • 1.86 kB
JavaScript
var utils = require('../utils'),
Module = require('module').Module,
fs = require('fs'),
path = require('path');
/**
* Initialize extensions
*/
module.exports = function(root) {
var root = root || this.root;
var autoload = path.join(root, 'config', 'autoload');
if (utils.existsSync(autoload + '.js')) {
var exts = require(autoload);
init(exts(this), this);
}
legacy.call(this);
function init(exts, c) {
if (exts && exts.forEach) {
exts.forEach(function (e) {
if (e.init) {
e.init(c);
}
});
}
}
function legacy() {
var ctx = getNPMFileContext(this);
var js = 'npmfile.js', filename;
if (utils.existsSync(path.join(root, js))) {
filename = js;
}
if (filename) {
var code = fs.readFileSync(filename).toString();
}
var fn = new Function('require', 'group', '__dirname', '__filename', code);
fn.call(null, ctx.require, ctx.group, path.dirname(filename), filename);
}
};
/**
* Prepare context for executing npm file. Context has two additional features:
* - group
* - improved require (run init method of module)
*
* @param {Railway} rw - railway
*/
function getNPMFileContext(rw) {
var ctx = {};
ctx.require = function(package) {
var ext = rw.extensions[package] = Module._load(package, {
id: rw.root + '/npmfile.js',
filename: rw.root + '/npmfile.js',
paths: [rw.root + '/node_modules', __dirname + '/../node_modules']
});
if (ext && ext.init) {
ext.init(rw);
}
};
ctx.group = function(env, callback) {
if (env == rw.app.settings.env) {
callback();
}
};
return ctx;
}