2

考虑到以下要求,试图找到正确的方法来确定模块 require()ing mine 的路径:

  • 必须符合严格模式
  • 不能对程序 args 做任何假设(即 process.argv)
  • 必须在任意位置的多个模块需要时工作一次执行(即我的模块被缓存)

我最终通过修补 Module._load() 并在闭包中捕获调用者路径来使其工作,如下所示:github

然而,这感觉不对——我一定是遗漏了一些东西。

4

1 回答 1

0

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

于 2012-11-11T04:31:00.350 回答