Nodejs:如何设置eval的文件名?

时间:2014-03-30 13:15:28

标签: node.js eval stack-trace

后台:我为node.js开发了一个小模块系统,它从一个单独的源服务器异步加载所有必需的代码,并用eval(code)编译它。我的问题是,对于这种“eval-ed”代码中的所有运行时错误,堆栈跟踪显示<anonymous>作为文件名---我无法区分引用哪个代码段。

我的问题:有没有办法为eval设置文件名,以便堆栈跟踪显示一些程序定义的字符串而不是<anonymous>

我当前(不完美)的解决方案:到目前为止,我将代码写入文件并使用require(file)加载它。这将播种文件名---但这是一个复杂的解决方法。

注意:通常,运行时错误不会在编译eval调用时显示,但稍后会在使用编译代码时显示。因此,围绕eval的try / catch无助于识别哪个代码块失败。

2 个答案:

答案 0 :(得分:4)

最终,V8引擎的这一新功能将进入Node.js:

Issue 2948: Support //# sourceURL= and //# sourceMappingURL= in v8's parser

此方法目前适用于浏览器。

答案 1 :(得分:0)

不要使用eval(永远)。出于您的目的,您可以使用vm modulevm.runInThisContext或其他方式)。您可以将文件名作为参数传递。 require内部做同样的事情。