问题
在 Node.js 模块的范围内有一个module
对象本来就是对当前模块的引用, a require
功能意味着需要模块 and a require.resolve
功能意味着查找模块的位置,但不加载模块,而是返回解析的文件名.
如果有一个module.require
因为有一个require
,为什么没有module.require.resolve
因为有一个require.resolve
?
或者可能是同样的事情:Why 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?')
Notes
- 在代码示例中,假设有一个名为
something.js
通过执行node something.js
.
- 请不要回答因为目前的实现是,问题是是否真的有理由证明当前的设计/实现/行为是合理的。
- 对于那些想知道用例的人,我想解析一个标识符,就像
require.resolve
是从主模块调用的,所以我期望require.main.require.resolve
不存在undefined
.
与SO相关
module.require 的目的是什么? https://stackoverflow.com/questions/18884959/what-is-the-purpose-of-module-require
相关文档
有关全局状态的 Node.js 文档here http://nodejs.org/api/globals.html#globals_require:
require()
需要模块。请参阅Modules http://nodejs.org/api/modules.html#modules_modules部分。require
实际上不是全局的,而是每个模块的本地的。
require.resolve()
使用内部require()
查找模块位置的机制,但不加载模块,而是返回解析的文件名。
and here http://nodejs.org/api/globals.html#globals_module:
module
对当前模块的引用。尤其module.exports
用于定义模块导出的内容以及通过以下方式提供的内容require()
.
module
实际上不是全局的,而是每个模块的本地的。
它还说明了有关模块的信息here http://nodejs.org/api/modules.html#modules_module_require_id that:
module.require(id)
module.require 方法提供了一种加载模块的方法,就像require()
从原始模块中调用。
请注意,为了执行此操作,您必须获取对模块对象的引用。自从require()
返回 module.exports,该模块通常仅在特定模块的代码中可用,必须显式导出才能使用。