以编程方式显示Javascript函数文件名

Show Javascript function filename programmatically

本文关键字:函数 文件名 Javascript 显示 编程 方式      更新时间:2023-09-26

我需要知道在javascript中调用变量或函数时是否有提取脚本名称的方法。场景是通过webdriver或node运行chrome,当调用例如window.jQuery.Animation时,我想获得定义该函数的文件名(即jQuery.js)。我知道在chrome中,你可以点击"显示函数代码"并跳转到文件,但我希望以编程的方式做到这一点。

感谢

也许Error对象可以在这里提供帮助:

var e = new Error;
console.log(e.stack);

堆栈的前两行:

Error
at Object.<anonymous> (/home/joost/src/test/testfile.js:3:9)

在纯JavaScript中没有这样的方法。

不同的javascript引擎(spiderMonkey、V8、…)通常会以某种方式编译javascript代码,因此在这个过程中会丢失这些信息。

要知道函数的来源,您需要该函数的源映射。如果你不知道它们,源映射会将脚本映射到它的原始文件名/行号。

mozilla sourceMap库将帮助您做到这一点。

不过,您还必须为您的文件生成一个使用jQuery的源映射。

如果你的script.js像

var a = jQuery.method // this is line 10
        ^ col 9

你必须执行

var sourceMap = require('source-map');
consumer = new SourceMapConsumer('script.map');
consumer.originalPositionFor({ line: 10, column: 9 })
// { source: 'jQuery.js',
//   line: 12971,
//   column: 222,
//   name: 'whatever' }

然后,您将能够查询声明该对象的原始位置和文件名。