关于javascript:Node.js:获取调用方函数的文件名

Nodejs: get filename of caller function

我想知道如何获取函数调用者的绝对路径?

让我们说:

我在文件a.js中的

称为b(); b()是文件b.js中定义的功能。 a.js要求b。那么如何从节点中的b.js获取a.js绝对路径?


n


这是一个如何使用stacktrace在node

中查找调用方文件的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function _getCallerFile() {
    try {
        var err = new Error();
        var callerfile;
        var currentfile;

        Error.prepareStackTrace = function (err, stack) { return stack; };

        currentfile = err.stack.shift().getFileName();

        while (err.stack.length) {
            callerfile = err.stack.shift().getFileName();

            if(currentfile !== callerfile) return callerfile;
        }
    } catch (err) {}
    return undefined;
}

此处未完全回答问题
但有些人可能会喜欢此信息。

使用NodeJS


n


n


在JavaScript中获取堆栈跟踪非常困难。我发现的最好的方法是抛出一个错误,捕获它,从Error.getStack()获取堆栈(并非在所有浏览器中都实现,这意味着您是IE。)并格式化输出。

每个堆栈框架都为您提供文件路径,行号和函数名。 Webkit甚至支持参数,但在我上次检查时仍无法使用。

然后就是跨不同事件跟踪代码的问题。

我实际上写了一篇关于此的博客文章:http://fritsvancampen.wordpress.com/2013/03/28/error-handling-in-javascript-a-better-way/


n


您可以使用require.resolve(module)确定模块的完整路径:

1
2
3
4
5
var path = require.resolve("a");

//or

var path = require.resolve("./a.js");