动态创建函数的源映射

时间:2018-03-24 09:13:32

标签: javascript

JavaScript允许您使用新的Function(...)或eval在运行时创建新函数。以这种方式创建的函数是否可以设置类似源映射的东西?也就是说,设置据称加载它的源文件的名称,以及不同的源行号。

如果没有通用解决方案,那么特定的JavaScript引擎可能会有特定的解决方案。

1 个答案:

答案 0 :(得分:2)

对于评估代码,您只需添加:

//# sourceMappingURL=<url>
//# sourceURL=<filename.js>

在您正在评估的代码的底部。对于sourceMappingURL,您将发送data url,因为当然您没有在某处托管现有的源地图,您将动态生成它。

将原始来源放置在源地图中的sourcesContent字段中,将源地图中的file字段设置为您在sourceURL中设置的任何字段,您应该很高兴。

我目前在功能构造函数中尝试使用它的尝试失败了,这是一种耻辱 - 在这种情况下,在Edge和Chrome中,原始源都被正确列出,但似乎行号信息被破坏(指令指针始终指向最后一行)。我正在调查此事。但是,源映射规范确实提到了包含源映射的函数构造函数:

  

如果使用eval()函数或通过new Function()将生成的代码作为字符串进行求值,则源原点将成为页面的原点。

这让我相信我做的事情很愚蠢,或者对这个功能没有很大的支持。