Closes GH-619 Make require.main be the main module
authorisaacs <i@izs.me>
Wed, 2 Feb 2011 17:56:32 +0000 (09:56 -0800)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 2 Feb 2011 19:18:34 +0000 (11:18 -0800)
lib/module.js
test/fixtures/not-main-module.js [new file with mode: 0644]
test/simple/test-module-loading.js

index de2f7ab..231f755 100644 (file)
@@ -155,7 +155,7 @@ Module._resolveLookupPaths = function(request, parent) {
 };
 
 
-Module._load = function(request, parent) {
+Module._load = function(request, parent, isMain) {
   if (parent) {
     debug('Module._load REQUEST  ' + (request) + ' parent: ' + parent.id);
   }
@@ -183,6 +183,12 @@ Module._load = function(request, parent) {
   }
 
   var module = new Module(id, parent);
+
+  if (isMain) {
+    process.mainModule = module;
+    module.id = '.';
+  }
+
   Module._cache[filename] = module;
   module.load(filename);
   return module.exports;
@@ -306,8 +312,7 @@ Module._extensions['.node'] = function(module, filename) {
 // bootstrap main module.
 Module.runMain = function() {
   // Load the main module--the command line argument.
-  process.mainModule = new Module('.');
-  Module._load(process.argv[1]);
+  Module._load(process.argv[1], null, true);
 };
 
 Module._initPaths = function() {
diff --git a/test/fixtures/not-main-module.js b/test/fixtures/not-main-module.js
new file mode 100644 (file)
index 0000000..3da57f4
--- /dev/null
@@ -0,0 +1,4 @@
+var assert = require('assert');
+assert.notEqual(module, require.main, 'require.main should not == module');
+assert.notEqual(module, process.mainModule,
+                'process.mainModule should not === module');
index 25002fa..d2e5308 100644 (file)
@@ -5,6 +5,14 @@ var fs = require('fs');
 
 common.debug('load test-module-loading.js');
 
+// assert that this is the main module.
+assert.equal(require.main.id, '.', 'main module should have id of \'.\'');
+assert.equal(require.main, module, 'require.main should === module');
+assert.equal(process.mainModule, module,
+             'process.mainModule should === module');
+// assert that it's *not* the main module in the required module.
+require('../fixtures/not-main-module.js');
+
 // require a file with a request that includes the extension
 var a_js = require('../fixtures/a.js');
 assert.equal(42, a_js.number);