node.js – 查找require()模块的path

试图find正确的方法来确定模块的path需要()我的以下要求:

  • 必须严格遵守模式
  • 不能对程序参数做任何假设(即process.argv)
  • 必须在任意位置的多个模块需要工作一个单一的执行(即我的模块caching)

我最终通过修补Module._load()并在闭包中捕获调用者path来实现这个function,如下所示: github

然而,这不正确 – 我必须错过一些东西。

修补module._load是我认为最好的方式。 您只能通过module.parent.filename获取第一个调用模块的模块。 并且模块的全部childrenparent属性只在第一次加载时才为真。 根据源代码 ,如果它被caching,你不能依赖任何东西。 你可以尝试从caching中删除自己( delete require.cache[__filename] ;)然后每次你的模块是必需的,你得到正确的父母,但是这会增加你的加载时间。