有没有办法在Node.js中调用module.require上的resolve()?

时间:2018-06-15 17:24:34

标签: node.js

似乎在Node.js 'require''module.require'不仅是单独的对象,还有不同类型的对象。 'require.resolve'存在,但'module.require.resolve'不存在。

有没有办法在module.require上调用resolve?

我想这样做的原因是我想调用 require.main.require.resolve()来查看require.main.require 解决了给定的路径。

1 个答案:

答案 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.requireprocess.mainModule相同,它本身就是require函数,而不是特殊对象。

解决方法是从您的条目脚本中导出resolve(),然后从其他脚本访问该导出的函数。

在你的主模块中,你可以把它放在:

module.exports.resolve = require.resolve;

然后,你可以通过以下方式访问其他地方:

require.main.exports.resolve(...);