babel-transiled代码中的抛出错误是否应显示已转换的代码或原始代码?

时间:2015-11-06 13:33:15

标签: babeljs source-maps

我使用SystemJS和Babel来转换ES6代码。

如果我在我的代码中添加了console.log,则可以在Chrome开发者工具中使用。控制台由于源图(即main.controller.js:9),我看到了原始文件的链接。

但是,如果我在代码中抛出一个Error,控制台中的堆栈跟踪会指向转换后的代码(即:main.controller.js!transpiled:20:17)。

这是预期的行为还是我的源图有问题?

1 个答案:

答案 0 :(得分:1)

是的,这是预期的行为。 Stacktrace行为不是ES6规范的一部分,它更像是已经确定的事实标准。涉及源图时的确切行为取决于开发人员和浏览器。

Chrome专门将读取文件的源图,并在控制台中显示未捕获的异常时显示映射信息,并在断点处显示有关当前执行跟踪的信息并单步执行代码时显示。您执行.stack时获得的错误的console.log值不会被Chrome翻译,并且会引用已转换的输出位置。

有些像https://github.com/evanw/node-source-map-support这样的项目会尝试覆盖Chrome的默认.stack行为,以将引用转换为原始文件中的点。在为Node开发时经常使用此模块,因为Node不会对其自己进行任何源映射处理。