后台:我为node.js开发了一个小模块系统,它从一个单独的源服务器异步加载所有必需的代码,并用eval(code)
编译它。我的问题是,对于这种“eval-ed”代码中的所有运行时错误,堆栈跟踪显示<anonymous>
作为文件名---我无法区分引用哪个代码段。
我的问题:有没有办法为eval设置文件名,以便堆栈跟踪显示一些程序定义的字符串而不是<anonymous>
?
我当前(不完美)的解决方案:到目前为止,我将代码写入文件并使用require(file)
加载它。这将播种文件名---但这是一个复杂的解决方法。
注意:通常,运行时错误不会在编译eval调用时显示,但稍后会在使用编译代码时显示。因此,围绕eval的try / catch无助于识别哪个代码块失败。
答案 0 :(得分:4)
最终,V8引擎的这一新功能将进入Node.js:
Issue 2948: Support //# sourceURL= and //# sourceMappingURL= in v8's parser
此方法目前适用于浏览器。
答案 1 :(得分:0)
不要使用eval(永远)。出于您的目的,您可以使用vm
module(vm.runInThisContext或其他方式)。您可以将文件名作为参数传递。 require
内部做同样的事情。