当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


node.js process.mainModule用法及代码示例


process.mainModule属性是流程模块的内置应用程序编程接口,用于获取主模块。这是获取require.main的另一种方法,但与require.main不同,process.mainModule在运行时动态更改。通常,我们可以假定这两个模块相同。

用法:

process.mainModule

返回值:此属性返回一个包含主模块引用的对象。


以下示例说明了Node.js中process.mainModule属性的用法:

范例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);

输出:

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' 
   ]
}

范例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]); 
}

输出:

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;
}

注意:上面的程序将通过使用node filename.js命令。

参考: https://nodejs.org/api/process.html#process_process_mainmodule



相关用法


注:本文由纯净天空筛选整理自anwesha0107大神的英文原创作品 Node.js | process.mainModule Property。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。