【问题标题】:access SourceMaps coffee访问 SourceMaps 咖啡
【发布时间】:2014-01-27 07:27:46
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: coffeescript source-maps


    【解决方案1】:

    是的,您可以通过 require "source-map" 使用 sourceMap。

    然后你应该得到stackTrace中的文件路径、行和列信息来转换。

    Kevin 编写了 coffeestack 库。

    npm install coffeestack
    

    用法:

    {convertStackTrace} = require 'coffeestack'
    
    try
      throw new Error('this is an error')
    catch error
      console.error(convertStackTrace(error.stack))
    

    更多详情请参阅CoffeeStack 包。

    【讨论】:

      【解决方案2】:

      这是我运行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()
      

      【讨论】:

      • 恐怕没有帮助,因为我没有将coffee编译成js来加载和运行它。我正在尝试访问从同一个咖啡脚本运行的咖啡脚本的 current 源映射(可能通过几个可以动态评估的require)。还是谢谢
      • 使用当前的coffeescript,如果您确实在动态编译,prepareStackTrace 确实使用了适当的sourceMap
      猜你喜欢
      • 2023-03-24
      • 2018-05-18
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 2013-03-11
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多