|
|
@ -381,6 +381,7 @@ Module.prototype._compile = function(content, filename) { |
|
|
|
require.cache = Module._cache; |
|
|
|
|
|
|
|
var dirname = path.dirname(filename); |
|
|
|
var define = makeDefine(require, self); |
|
|
|
|
|
|
|
if (Module._contextLoad) { |
|
|
|
if (self.id !== '.') { |
|
|
@ -397,6 +398,7 @@ Module.prototype._compile = function(content, filename) { |
|
|
|
sandbox.module = self; |
|
|
|
sandbox.global = sandbox; |
|
|
|
sandbox.root = root; |
|
|
|
sandbox.define = define; |
|
|
|
|
|
|
|
return runInNewContext(content, sandbox, filename, true); |
|
|
|
} |
|
|
@ -408,6 +410,7 @@ Module.prototype._compile = function(content, filename) { |
|
|
|
global.__filename = filename; |
|
|
|
global.__dirname = dirname; |
|
|
|
global.module = self; |
|
|
|
global.define = define; |
|
|
|
|
|
|
|
return runInThisContext(content, filename, true); |
|
|
|
} |
|
|
@ -419,10 +422,44 @@ Module.prototype._compile = function(content, filename) { |
|
|
|
if (filename === process.argv[1] && global.v8debug) { |
|
|
|
global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0); |
|
|
|
} |
|
|
|
var args = [self.exports, require, self, filename, dirname]; |
|
|
|
|
|
|
|
var args = [self.exports, require, self, filename, dirname, define]; |
|
|
|
return compiledWrapper.apply(self.exports, args); |
|
|
|
}; |
|
|
|
|
|
|
|
// AMD compatibility
|
|
|
|
function makeDefine(require, module) { |
|
|
|
var called = false; |
|
|
|
function define() { |
|
|
|
if (called) { |
|
|
|
throw new Error("define() may only be called once."); |
|
|
|
} |
|
|
|
called = true; |
|
|
|
|
|
|
|
// only care about the last argument
|
|
|
|
var cb = arguments[ arguments.length - 1 ]; |
|
|
|
|
|
|
|
// set exports immediately:
|
|
|
|
// define({ foo: "bar" })
|
|
|
|
if (typeof cb !== 'function') { |
|
|
|
module.exports = cb; |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
var ret = cb(require, module.exports, module); |
|
|
|
|
|
|
|
if (ret !== undefined) { |
|
|
|
// set exports with return statement
|
|
|
|
// define(function () { return { foo: "bar" } })
|
|
|
|
module.exports = ret; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return define; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Native extension for .js
|
|
|
|
Module._extensions['.js'] = function(module, filename) { |
|
|
|
var content = NativeModule.require('fs').readFileSync(filename, 'utf8'); |
|
|
|