为什么require.main.require.resolve是未定义的?

这个问题

怀疑node.js模块的范围有一个module对象意味着对当前模块的引用 ,一个require函数意味着需要模块和一个require.resolve函数,意在查找模块的位置,而不是加载该模块只是返回parsing的文件名

如果有一个module.require因为有require ,为什么没有一个module.require.resolve因为有一个require.resolve

或者可能是同样的事情: 为什么module.require !== require

 console.log('is require.main the same as module?'); console.log( require.main === module ); console.log('does module have a require property being a function?'); console.log( 'function' === typeof module.require ); console.log('is module.require the same as require.main.require?') console.log( module.require === require.main.require ); console.log('is module.require the same as require?') console.log( module.require === require ); console.log('why not?') 

笔记

  1. 在代码示例中,假定通过node something.js执行一个名为something.js的文件。
  2. 请不要回答, 因为目前的实施是这样的 ,问题是,是否真的有理由certificate当前的devise/实施/行为。
  3. 对于那些想知道用例的人,我想要parsing一个标识符,好像require.resolve是从主模块中调用的,所以我期望require.main.require.resolve不是undefined

关于SO

module.require有什么用途?

相关文档

关于全局variables的node.js文档在这里指出:

require()

要求模块。 请参阅模块部分。 require实际上并不是一个全局的,而是每个模块本地的。

require.resolve()

使用内部的require()机制来查找模块的位置,而不是加载模块,只是返回parsing的文件名。

这里 :

module对当前模块的引用。 特别是module.exports用于定义模块导出并通过require()

module实际上并不是全局的,而是每个模块本地的。

它还在这里指出模块:

module.require(id)

module.require方法提供了一种加载模块的方法,就好像从原始模块中调用require()

请注意,为了做到这一点,您必须获得对模块对象的引用。 由于require()返回module.exports,并且模块通常只在特定模块的代码中可用,所以必须显式导出才能使用。