代码之家  ›  专栏  ›  技术社区  ›  Panu Logic

是否有方法在node.js中对module.require调用resolve()?

  •  1
  • Panu Logic  · 技术社区  · 8 年前

    在node.js中 “需要” 和 '模块。需要' 不仅是单独的对象,而且是不同类型的对象。require.resolve“存在,但module.require.resolve”不存在。

    是否有任何方法对module.require调用resolve?

    我想这么做的原因是我想打电话给 require.main.require.resolve() 看看需要什么。 解析给定的路径。

    1 回复  |  直到 8 年前
        1
  •  2
  •   jfriend00    8 年前

    这是我能找到的解释。

    require.main 获取此node.js进程中首先运行的脚本的模块对象。

    require.main.require 获取一个函数,该函数可用于加载脚本,就像在主脚本中一样。

    需要.main.require 没有 .resolve() 方法。同时 需要.main.require 确实为您提供了一个require函数,因为您发现它与您在模块本身中获得的对象不完全相同。它只是一个函数,似乎没有require对象在您自己的模块中具有的任何属性。

    您自己模块中的require对象由一个名为 makeRequireFunction() 在装载机中(参见 source code here )这就是其他属性添加到它的地方。但是, 需要.main.require 与 process.mainModule 仅仅是需求函数本身,而不是那个特殊的对象。


    解决办法是出口 resolve() 然后从输入脚本访问从另一个脚本导出的函数。

    在您的主模块中,您可以将此:

    module.exports.resolve = require.resolve;
    

    然后,您可以在其他地方访问它:

    require.main.exports.resolve(...);
    
    推荐文章