使用Chrome时,我通过Mocha测试运行程序收到一个错误,该错误是作为afterEach
和this.currentTest.err
的一部分捕获的。
我正在用browserify编译coffeescript,并使用很棒的coffeify插件进行调试。这将生成一个带有sourceMappingURL=data:...
的已编译文件bundle.js
,它允许我直接查看和调试原始的coffee脚本。
不幸的是,当我在afterEach
Mocha钩子中访问err.stack
时,堆栈包含对bundle.js
的引用,而不是相应的.coffee
文件,这将更加有用。
下面是一些带有browserfy的示例代码。
首先,安装它(为了方便)与npm:
$ npm install -g browserify; npm install coffeeify
x.coffee
try
throw Error("Thrown.")
catch err
console.log err.stack
使用转换为x.js
$ browserify -t coffeeify x.coffee -d > x.js
x.html
<html>
<head>
<script src='x.js'></script>
</head>
<body></body>
</html>
如果在Chrome中打开它,开发工具将显示x.js
、x.coffee
(来自sourceMapURL
)和x.html
。
当我们运行这个HTML页面时,我们会得到console
的以下输出:
错误:抛出。出现错误()在对象处。(file://localhost/Users/bmh/tmp/x.js:5:9)在i(file://localhost/Users/bmh/tmp/x.js:1:219)犯错(file://localhost/Users/bmh/x.js:1:382)在file://localhost/Users/bmh/tmp/x.js:1:400
我们期望的是让跟踪引用.coffee
文件,看起来像这样(我在这里为说明目的而编造):
错误:抛出。出现错误()在对象处。(file://localhost/Users/bmh/tmp/x.coffee:2:5)
是否有人成功地将错误堆栈转换为引用其源映射位置的项的错误堆栈?
我不确定coffeify,但源地图支持模块为与browserify捆绑的代码添加了.stack
支持。只需npm install source-map-support
,并将require('source-map-support').install()
放在代码的顶部。