La propiedad process.mainModule es una interfaz de programación de aplicaciones incorporada del módulo de proceso que se utiliza para obtener el módulo principal. Esta es una forma alternativa de obtener require.main pero, a diferencia de require.main, process.mainModule cambia dinámicamente en tiempo de ejecución. Generalmente podemos asumir que esos dos módulos son iguales.
Sintaxis:
process.mainModule
Valor devuelto: esta propiedad devuelve un objeto que contiene la referencia del módulo principal.
Los siguientes ejemplos ilustran el uso de la propiedad process.mainModule en Node.js:
Ejemplo 1:
// Node.js program to demonstrate the // process.mainModule Property // Include process module const process = require('process'); // Printing process.mainModule property value console.log(process.mainModule);
Producción:
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' ] }
Ejemplo 2:
// Node.js program to demonstrate the // process.mainModule Property // Include process module const process = require('process'); // Printing process.mainModule property value var mainModule = process.mainModule; for(mod in mainModule) { console.log(mod + ":" + mainModule[mod]); }
Producción:
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; }
Nota: El programa anterior se compilará y ejecutará usando el node filename.js
comando.
Referencia: https://nodejs.org/api/process.html#process_process_mainmodule