簡體   English   中英

理解源映射

[英]Understanding source maps

我在basic.js文件中有以下帶有行號的代碼:

1 /**
2  * This is a multi-line comment.
3  * So the error shouldn't throw until a later line.
4  * Om nom nom.
5 */
6 throw new Error('Hello world!');

然后我縮小了文件:

1
2 throw new Error('Hello world!');
3 //@ sourceMappingURL=basic.js.map

和映射:

{
    "version" : 3,
    "file" : "basic.min.js",
    "sources" : ["basic.js"],
    "names" : [],
    "mappings" : "AAIG,AAAH;CACC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"
}

我正在查看縮小文件中的第二行,因此我需要查看映射的這一部分:

CACC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"

我已經使用這個解碼器解碼了第一段CACC並輸出:

[1,0,1,1]

據我了解,根據本教程basic.min.js中的第 1 列映射到sources文件中索引為0的文件,即basic.js及其第 1 行和第 1 列。但它是映射到原始編號中的第 6 行。 我錯過了什么?

你錯過了

  1. 行和列從零開始
  2. 段值實際上是將 delta 添加到前一個值以獲得當前位置

逐行:

//basic.js
0 /**
1  * This is a multi-line comment.
2  * So the error shouldn't throw until a later line.
3  * Om nom nom.
4 */
5 throw new Error('Hello world!');

//basic.min.js
0 
1 throw new Error('Hello world!');
2 //@ sourceMappingURL=basic.js.map

//line 0
AAIG >  0,  0,  4,  3 // current value 0, 0, 4, 3
AAAH >  0,  0,  0, -3 // current value 0, 0, 4, 0
;
//line 1
CACC >  1,  0,  1,  1 // current value 1, 0, 5, 1

1 // output file column
0 // input file index
5 // input file line
1 // input file column

這讓我們知道生成的文件的第 1 行,第 1 列映射到文件 0(在文件 0 的數組中是 basic.js),第 5 行的第 1 列。

這里查看可視化工具

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM