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

以编程方式显示Javascript函数文件名,javascript,node.js,webdriver,google-chrome-devtools,trace,Javascript,Node.js,Webdriver,Google Chrome Devtools,Trace,我需要知道在javascript中调用变量或函数时是否有提取脚本名称的方法。该场景通过webdriver或节点运行chrome,当调用例如window.jQuery.Animation时,我希望获得定义此函数的文件名(即jQuery.js)。我知道在chrome中,你可以点击“显示函数代码”并跳转到该文件,不过我希望通过编程的方式实现同样的功能 谢谢您在纯JavaScript中没有这样做的方法 不同的javascript引擎(spiderMonkey,V8,…)通常会以某种方式编译javascr

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


谢谢

您在纯JavaScript中没有这样做的方法

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

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

mozilla库将帮助您实现这一点

不过,您还必须为您的文件生成一个使用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' }

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

也许错误对象可以帮助您:

var e = new Error;
console.log(e.stack);
堆栈的前两行:

Error
at Object.<anonymous> (/home/joost/src/test/testfile.js:3:9)
错误
反对。(/home/joost/src/test/testfile.js:3:9)

除非脚本在加载时记录该信息,否则很难做到这一点。即使这样,它也不总是可靠的,例如,如果脚本被标记为defer或async。这有什么帮助?问题是“如何找到jQuery的$or lodash的定义在哪里?”。在这里,您的错误只跟踪错误实际定义的位置,它不帮助您查询方法的声明。我用它修改了一些代码,想知道调用它的是什么。再次阅读这个问题,它看起来实际上与作者想要的正好相反,所以我猜它实际上一点用处都没有!这个功能存在于chrome中,也就是说,我可以通过单击ShowFunctionCode(devtools)获得javascript中声明函数的文件名和行号。因此,信息保存在V8中的某个地方,但我无法获取它(例如,通过远程调试)。源代码映射非常适合,但是我的方法是blackbox(我不控制正在加载的脚本)