Skip to content

Instantly share code, notes, and snippets.

@FLYBYME
Created July 27, 2012 17:24
Show Gist options
  • Save FLYBYME/3189241 to your computer and use it in GitHub Desktop.
Save FLYBYME/3189241 to your computer and use it in GitHub Desktop.
var fs = require('fs');
var path = require('path');
var util = require('util');
var vm = require('vm');
var Module = require('module');
/***
* Node modules
*/
var events = require('events');
var util = require('util');
var url = require("url");
var path = require('path');
var qs = require("querystring");
var fs = require('fs');
var __require = require;
var __resolve = require.resolve;
//
/**
*
*/
var VmModules = module.exports = function(env) {
events.EventEmitter.call(this);
this.env = env;
}
/***
* Make it an event
*/
util.inherits(VmModules, events.EventEmitter);
/**
*
* @param {String} file
* @param {Function} callBack
*/
var nativeModules = ['http', 'util', 'events', 'domain', 'stream', 'crypto', 'tls', 'string_decoder', 'fs', 'path', 'net', 'dgram', 'dns', 'url', 'querystring', 'punycode', 'readline', 'vm', 'assert', 'tty', 'zlib', 'os']
VmModules.prototype.build = function(appDir, file, sync, callBack) {
var env = this.env;
var config = env.get('config');
var package = env.get('package');
function _require(file) {
if (nativeModules.indexOf(file) !== -1) {
return require(file)
}
if (file.substring(0, 2) === './') {
var _vm = new VmModules(env)
return _vm.build(appDir, file, sync)
} else {
return require(appDir + '/node_modules/' + file)
}
}
var sandbox = {
global : {},
process : process,
require : _require,
console : console,
module : {},
exports : {},
__filename : file,
__dirname : appDir,
clearInterval : clearInterval,
clearTimeout : clearTimeout,
setInterval : setInterval,
setTimeout : setTimeout,
raft : {
init : true,
require : _require,
env : env,
servers : env.servers
}
};
if (file.substring(file.length - 3, file.length) !== '.js') {
file = file + '.js'
}
require.resolve(appDir + '/' + file)
try {
vm.runInNewContext(fs.readFileSync(appDir + '/' + file, 'utf8'), sandbox, file);
} catch(e) {
throw e
}
return sandbox.exports
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment