为什么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?')
笔记
- 在代码示例中,假定通过
node something.js
执行一个名为something.js
的文件。 - 请不要回答, 因为目前的实施是这样的 ,问题是,是否真的有理由certificate当前的devise/实施/行为。
- 对于那些想知道用例的人,我想要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,并且模块通常只在特定模块的代码中可用,所以必须显式导出才能使用。