VOOZH about

URL: https://www.geeksforgeeks.org/node-js/node-js-process-mainmodule-property/

⇱ Node.js process.mainModule Property - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Node.js process.mainModule Property

Last Updated : 28 Apr, 2025

The process.mainModule property is an inbuilt application programming interface of the processing module which is used to get the main module. This is an alternative way to get require.main but unlike require.main, process.mainModule dynamically changes in runtime. Generally, we can assume those two modules are the same. 

Syntax:

process.mainModule

Return Value: This property returns an object that contains the reference of the main module. 

Below examples illustrate the use of process.mainModule property in Node.js: 

Note: This property has been deprecated.

Example 1: 

Output:

Module {
 id: '.',
 exports: {},
 parent: null,
 filename: 'C:\\nodejs\\g\\process\\mainmodule_1.js',
 loaded: false,
 children: [],
 paths:
 [ 'C:\\nodejs\\g\\process\\node_modules',
 'C:\\nodejs\\g\\node_modules',
 'C:\\nodejs\\node_modules',
 'C:\\node_modules' 
 ]
}

Example 2: 

Output:

id:.
exports:[object Object]
parent:null
filename:/home/cg/root/6720369/main.js
loaded:false
children:
paths:/home/cg/root/6720369/node_modules, /home/cg/root/node_modules,
 /home/cg/node_modules, /home/node_modules, /node_modules
load:function (filename) {
 debug('load %j for module %j', filename, this.id);

 assert(!this.loaded);
 this.filename = filename;
 this.paths = Module._nodeModulePaths(path.dirname(filename));

 var extension = path.extname(filename) || '.js';
 if (!Module._extensions[extension]) extension = '.js';
 Module._extensions[extension](this, filename);
 this.loaded = true;
}
require:function (path) {
 assert(path, 'missing path');
 assert(typeof path === 'string', 'path must be a string');
 return Module._load(path, this, /* isMain */ false);
}
_compile:function (content, filename) {
 // Remove shebang
 var contLen = content.length;
 if (contLen >= 2) {
 if (content.charCodeAt(0) === 35/*#*/ &&
 content.charCodeAt(1) === 33/*!*/) {
 if (contLen === 2) {
 // Exact match
 content = '';
 } else {
 // Find end of shebang line and slice it off
 var i = 2;
 for (; i < contLen; ++i) {
 var code = content.charCodeAt(i);
 if (code === 10/*\n*/ || code === 13/*\r*/)
 break;
 }
 if (i === contLen)
 content = '';
 else {
 // Note that this actually includes the newline character(s) in the
 // new output. This duplicates the behavior of the regular expression
 // that was previously used to replace the shebang line
 content = content.slice(i);
 }
 }
 }
 }

 // create wrapper function
 var wrapper = Module.wrap(content);

 var compiledWrapper = vm.runInThisContext(wrapper, {
 filename: filename,
 lineOffset: 0,
 displayErrors: true
 });

 if (process._debugWaitConnect && process._eval == null) {
 if (!resolvedArgv) {
 // we enter the repl if we're not given a filename argument.
 if (process.argv[1]) {
 resolvedArgv = Module._resolveFilename(process.argv[1], null);
 } else {
 resolvedArgv = 'repl';
 }
 }

 // Set breakpoint on module start
 if (filename === resolvedArgv) {
 delete process._debugWaitConnect;
 const Debug = vm.runInDebugContext('Debug');
 Debug.setBreakPoint(compiledWrapper, 0, 0);
 }
 }
 var dirname = path.dirname(filename);
 var require = internalModule.makeRequireFunction.call(this);
 var args = [this.exports, require, this, filename, dirname];
 var depth = internalModule.requireDepth;
 if (depth === 0) stat.cache = new Map();
 var result = compiledWrapper.apply(this.exports, args);
 if (depth === 0) stat.cache = null;
 return result;
}

Note: The above program will compile and run by using the node filename.js command. 

Reference: https://nodejs.org/api/process.html#process_process_mainmodule

Comment

Explore