2013-10-21 13 views
2

我正在编写一个工具,它将使用browserify转换将许多行添加到许多JavaScript文件的顶部和底部。我想弄清楚如何生成包含原始源代码转换以及删除由我的其他代码创建的偏移量的源代码贴图。例如:如何从节点中的现有源图生成新的源图?

# original source file - test.coffee 
console.log "test" 

此使用的CoffeeScript编译器被变换成

// Generated by CoffeeScript 1.6.3 
(function() { 
     console.log("test"); 

}).call(this); 

/* 
//@ sourceMappingURL=test.map 
*/ 

的CoffeeScript的编译器还提供一个指向像

{ 
    "version": 3, 
    "file": "test.js", 
    "sourceRoot": "", 
    "sources": [ 
    "test.coffee" 
    ], 
    "names": [], 
    "mappings": ";AAAA;CAAA,CAAA,CAAA,GAAA,CAAO;CAAP" 
} 

我需要修改的映射的sourceMappingURL通过在前后添加几行输出JavaScript文件。

my.instrumentation.line(1); 
my.instrumentation.line(2); 
// Generated by CoffeeScript 1.6.3 
(function() { 
     console.log("test"); 

}).call(this); 
my.instrumentation.line(8); 
my.instrumentation.line(9); 

我需要弄清楚如何使用映射文件的CoffeeScript的编译器提供通过我的变化,来图,并通过CoffeeScript的编译器,全部回到原来的CoffeeScript源方式。

目前,只要没有额外的源代码处理,我就可以做这个源代码映射。例如,如果我从JS开始,而不是CS开始,则可以使用Thorsten Lorzen's inline-source-map library生成源映射,只要没有进行第二级转换,就可以正常工作。将相同原始源的多个源地图组合在一起时,我很困惑。

任何帮助或建议将大大增值。

+1

你见过[Mozilla的源地图库](https://github.com/mozilla/source-map)吗?在节点工作,可能做你需要的东西? –

回答

1

我需要弄清楚如何使用coffeescript编译器提供的映射文件来映射我的更改以及通过coffeescript编译器,一直返回到原始coffeescript源代码。

使用Mozilla source-map项目提供的API。

使用applySourceMap方法。它执行以下操作:

将源文件的源映射应用于源映射。使用提供的SourceMap重写每个到提供的源文件的映射。注意:结果映射的分辨率是此地图和提供的地图的最小值。

allGeneratedPostionsfor方法。它执行以下操作:

返回提供的原始源行,列和列的所有生成行和列信息。如果未提供列,则返回与我们正在搜索的行对应的所有映射或具有任何映射的下一个最接近的行。否则,返回与给定行相对应的所有映射,以及我们正在搜索的列或具有任何偏移的下一个最接近的列。