如何知道从哪个模块调用了函数

时间:2018-08-22 22:47:07

标签: node.js

是否有一种(创造性的)方式可以知道哪个模块叫函数? 为了使代码更简洁明了。

module-a.js

module.exports = {
    foo = function(calledFrom){
        console.log("foo() called from module: " + calledFrom)
    }
}


// But ideally, something like:
module.exports = {
    foo2 = function(){
        console.log("foo2() called from module: " + arguments[0]) 
        //Or any other way to achieve this generic behaviour
    }
}

module-b.js

require('./module-b.js').foo('module-b')

// But ideally:
require(./module-b.js).foo2()

来自python,我喜欢简单的哲学。

1 个答案:

答案 0 :(得分:0)

this similar answer中所述,可以从堆栈跟踪中获取调用者路径:

const caller = require('caller-callsite');

exports.foo = function(){
    const fullPath = caller().getFileName();
    console.log("foo() called from module: " + fullPath) 
}

一种更清洁的方法是显式地指定路径,特别是如果将其用于不仅仅是调试(这是堆栈跟踪的主要目标)的情况下:

require('./module-b.js').foo(__filename)