3

我正在编写一个工具,它将使用 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 编译器还提供了一个 sourceMappingURL 指向一个映射,例如

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

我需要通过在前后添加几行来修改 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);

我需要弄清楚如何使用咖啡脚本编译器提供的映射文件来映射我的更改,并通过咖啡脚本编译器,一直映射到原始咖啡脚本源。

目前,只要没有额外的源映射可以使用,我就可以进行此源映射。例如,如果我从 JS 而不是 CS 开始,我可以使用Thorsten Lorzen 的 inline-source-map 库生成一个源图,只要没有进行第二级转换,它就可以正常工作。在同一原始源上组合多个源映射时,我很困惑该怎么做。

任何帮助或建议将不胜感激。

4

2 回答 2

1

我需要弄清楚如何使用咖啡脚本编译器提供的映射文件来映射我的更改,并通过咖啡脚本编译器,一直映射到原始咖啡脚本源。

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

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

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

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

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

于 2015-12-18T01:20:29.523 回答
0

对我来说 applySourceMap 没有用。当我添加一个片段时,它没有更新以下文件引用。对我来说,SourceNode.prototype.prepend(chunk)从同一个库https://github.com/mozilla/source-map开始工作。

https://gist.github.com/prumand/73ae1a01d22029d7969ce8a5dcaa453d

于 2020-02-28T12:06:24.000 回答