babel 转译代码中抛出的错误应该显示转译代码还是原始代码?

Should a thrown error in babel-transpiled code show the transpiled code or the original?

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

如果我在我的代码中放置一个 console.log,在 Chrome 开发者工具的控制台中,由于源映射(即:main.controller.js:9).

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

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

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

Chrome 特别会在控制台中显示未捕获的异常时读取文件的 sourcemap 并显示映射信息,以及在断点处和单步执行代码时显示有关当前执行跟踪的信息。错误的 .stack 值,如果您执行 console.log,则不会被 Chrome 翻译,并且将引用转译的输出位置。

https://github.com/evanw/node-source-map-support 这样的项目试图覆盖 Chrome 的默认 .stack 行为以将引用转换为指向原始文件。在为 Node 开发时经常使用此模块,因为 Node 本身不进行任何 sourcemap 处理。