访问SourceMaps咖啡

时间:2014-01-08 23:06:14

标签: coffeescript source-maps

我想为异常堆栈跟踪实现自己的格式,我知道Error.prepareStackTrace就像魅力一样。

当我通过coffee运行程序来使用coffee-script时出现问题,而不保存中间* .js结果及其源映射文件。我想从.coffee文件中显示正确的行号,而不是来自已编译的.js

是否可以通过require在运行时动态加载的文件中访问coffee-script的内部运行时sourceMaps(或获取相同的值)?我知道在sourceMaps = {}中有一个局部变量coffee-script.coffee,由咖啡脚本编译器本身使用,但在模块闭包之外无法访问它。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这是我运行simplenested.coffee时包含require 'simpleerror.coffee'的堆栈跟踪。至少在1.6.3中,使用两个文件的sourceMaps。中间是loadFile的行。如果事先编译了任一文件,相关的框架行将引用Javascript代码。

2011:~/myjs$ coffee simplenested.coffee 
ReferenceError: x is not defined
  at foo (/.../simpleerror.coffee:4:7)
  at Object.<anonymous> (/.../simpleerror.coffee:7:1)
  at Object.<anonymous> (/.../simpleerror.coffee:2:1)
  at Module._compile (module.js:456:26)
  at Object.loadFile (/.../coffee-script/lib/coffee-script/coffee-script.js:182:19)
  at Module.load (/.../coffee-script/lib/coffee-script/coffee-script.js:211:36)
  at Function.Module._load (module.js:312:12)
  at Module.require (module.js:364:17)
  at require (module.js:380:17)
  at Object.<anonymous> (/.../simplenested.coffee:2:8)
  at Object.<anonymous> (/.../simplenested.coffee:1:1)
  at Module._compile (module.js:456:26)

simplenest.coffee

require 'coffee-script'
nested=require './simpleerror'

simpleerror.coffee

foo = () ->
  y = 'testing'
  y = x # expect ReferenceError
  return y

foo()

答案 1 :(得分:0)

是的,您可以通过require&#34; source-map&#34;。

使用sourceMap

然后你应该在stackTrace中获取filePath,line和column信息进行转换。

凯文写了咖啡库。

npm install coffeestack

用法:

{convertStackTrace} = require 'coffeestack'

try
  throw new Error('this is an error')
catch error
  console.error(convertStackTrace(error.stack))

更多细节请参阅CoffeeStack包。