Node.js process.mainModule Property - GeeksforGeeks

12 Oct, 2021
The process.mainModule property is an inbuilt application programming interface of the process 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. Gennerally we can assume those two modules are the same.
Syntax:
process.mainModule
Return Value: This property returns an object that contains the reference of main module.
Below examples illustrate the use of process.mainModule property in Node.js:
Example 1:
// Node.js program to demonstrate the// process.mainModule Property   // Include process moduleconst process = require('process');  // Printing process.mainModule property valueconsole.log(process.mainModule);
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:
// Node.js program to demonstrate the// process.mainModule Property   // Include process moduleconst process = require('process');  // Printing process.mainModule property valuevar mainModule = process.mainModule;for(mod in mainModule) {    console.log(mod + ":" + mainModule[mod]);}
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
Node.js-process-module
Node.js
Web Technologies
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Node.js fs.writeFile() Method
How to install the previous version of node.js and npm ?
Difference between promise and async await in Node.js
How to use an ES6 import in Node.js?
Express.js res.render() Function
Remove elements from a JavaScript Array
Convert a string to an integer in JavaScript
How to fetch data from an API in ReactJS ?
Difference between var, let and const keywords in JavaScript
How to insert spaces/tabs in text using HTML/CSS?