代码改变世界

JavaScript Source Map

2013-02-17 22:05  lefan  阅读(460)  评论(0编辑  收藏  举报

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

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

  //@ sourceMappingURL=jquery.min.map

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

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

什么是Source map

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

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

 

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

 

如何启用Source map

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

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

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

如何生成Source map

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

生成命令的格式如下:

  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_formatsource 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对象,可以被解释器读取。它主要有以下几个属性:

  - versionSource map的版本,目前为3

  - file:转换后的文件名。

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

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

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

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