jQuery 1.9发布了,这是2.0版之前的最后一个新版本,有很多新功能,其中一个就是支持Source Map。

源文件打开,滚动到底部,你可以看到最后一行是这样的:

//@ sourceMappingURL=jquery.min.map

这就是Source Map。它是一个独立的map文件,与源码在同一个目录下,你可以点击进去,看看它的样子。

这是一个很有用的功能,本文将详细讲解这个功能。

什么是Source map

简单说,Source map就是一个信息文件,里面储存着位置信息。也就是说,转换后的代码的每一个位置,所对应的转换前的位置。

有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码。这无疑给开发者带来了很大方便。

 

编辑sources里面的js代码 javascript sourcemap_字符串

目前,暂时只有Chrome浏览器支持这个功能。在Developer Tools的Setting设置中,确认选中"Enable source maps"。

 

编辑sources里面的js代码 javascript sourcemap_Source_02

如何启用Source map

正如前文所提到的,只要在转换后的代码尾部,加上一行就可以了。

//@ sourceMappingURL=/path/to/file.js.map

map文件可以放在网络上,也可以放在本地文件系统。

如何生成Source map

最常用的方法是使用Google的Closure编译器。

生成命令的格式如下:

java -jar compiler.jar \ 

--js script.js \

--create_source_map ./script-min.js.map \

--source_map_format=V3 \

--js_output_file script-min.js

各个参数的意义如下:

- js: 转换前的代码文件

- create_source_map: 生成的source map文件

- source_map_format:source map的版本,目前一律采用V3。

- js_output_file: 转换后的代码文件。

其他的生成方法可以参考这篇文章。

Source map的格式

打开Source map文件,它大概是这个样子:

{
version : 3,
file: "out.js",
sourceRoot : "",
sources: ["foo.js", "bar.js"],
names: ["src", "maps", "are", "fun"],
mappings: "AAgBC,SAAQ,CAAEA"
}

整个文件就是一个JavaScript对象,可以被解释器读取。它主要有以下几个属性:

- version:Source map的版本,目前为3。

- file:转换后的文件名。

- sourceRoot:转换前的文件所在的目录。如果与转换前的文件在同一目录,该项为空。

- sources:转换前的文件。该项是一个数组,表示可能存在多个文件合并。

- names:转换前的所有变量名和属性名。

- mappings:记录位置信息的字符串。