似乎在Node.js 'require'和'module.require'不仅是单独的对象,还有不同类型的对象。 'require.resolve'存在,但'module.require.resolve'不存在。
有没有办法在module.require上调用resolve?
我想这样做的原因是我想调用 require.main.require.resolve()来查看require.main.require 解决了给定的路径。
答案 0 :(得分:2)
这是我能解释的内容。
require.main
为您获取此node.js进程中首先运行的脚本的模块对象。
require.main.require
为您提供了一个可用于加载脚本的功能,就像您在主脚本中一样。
require.main.require
没有.resolve()
方法。虽然require.main.require
确实为您提供了require函数,但是您发现它与您在模块本身时所获得的对象不完全相同。它只是一个函数,似乎没有require对象在您自己的模块中具有的属性。
您自己模块中的require对象由加载器中名为makeRequireFunction()
的特殊函数创建(请参阅source code here)。那是其他属性添加到其中的位置。但是,require.main.require
与process.mainModule
相同,它本身就是require函数,而不是特殊对象。
解决方法是从您的条目脚本中导出resolve()
,然后从其他脚本访问该导出的函数。
在你的主模块中,你可以把它放在:
module.exports.resolve = require.resolve;
然后,你可以通过以下方式访问其他地方:
require.main.exports.resolve(...);