summaryrefslogtreecommitdiff
path: root/lib/module.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/module.js')
-rw-r--r--lib/module.js41
1 files changed, 39 insertions, 2 deletions
diff --git a/lib/module.js b/lib/module.js
index 11c518922..daf73d96f 100644
--- a/lib/module.js
+++ b/lib/module.js
@@ -20,7 +20,7 @@
// USE OR OTHER DEALINGS IN THE SOFTWARE.
var NativeModule = require('native_module');
-var Script = process.binding('evals').Script;
+var Script = process.binding('evals').NodeScript;
var runInThisContext = Script.runInThisContext;
var runInNewContext = Script.runInNewContext;
var assert = require('assert').ok;
@@ -360,6 +360,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 !== '.') {
@@ -376,6 +377,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);
}
@@ -387,6 +389,7 @@ Module.prototype._compile = function(content, filename) {
global.__filename = filename;
global.__dirname = dirname;
global.module = self;
+ global.define = define;
return runInThisContext(content, filename, true);
}
@@ -398,10 +401,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');