Open SyMind opened 3 years ago
原文:https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#
原始 source map 格式(v1)由 Joseph Schorr 创建,用于 Closure 支持对优化后的 JavaScript 代码进行源代码级调试(尽管该格式本身与语言无关)。然而,随着使用 source map 的项目规模不断扩大,格式的冗长开始成为问题。v2 提供一些简单性和灵活性,以减小 source map 的总体大小。即使对 v2 版本的格式进行了更改,source map 文件的大小也限制了其用途。v3 格式基于@podivilov 的建议。
相关文档: Revision 2 proposal
{ "version" : 3, "file": "out.js", "sourceRoot": "", "sources": ["foo.js", "bar.js"], "sourcesContent": [null, null], "names": ["src", "maps", "are", "fun"], "mappings": "A,AAAB;;ABCDE;" }
第1行:文件整体是一个 JSON 对象。 第2行:文件版本始终是对象中的第一项,并且必须是正整数。 第3行:可选项,与该 source map 关联的转换后的代码文件名。 第4行:可选项,源文件根目录,用于在服务器上重新定位源文件或删除『sources』字段中的重复值。此值将被添加到『sources』字段中的各项前。 第5行:『mappings』使用的源文件的列表。 第6行:可选项,源代码列表,在宿主环境中无法检索源代码时非常有用。内容按与第5行中『sources』项相同的顺序列出。如果应当按名称检索某些原始资源,则可使用『null』。 第7行:『mappings』项所使用的符号名列表。 第8行:编码后的映射数据的字符串。
『mappings』数据结构如下:
每个段中的字段为:
注意:使用谷歌日历进行测试,此编码相对于 V2 格式 source map 的大小减少了 50%。
背景
原始 source map 格式(v1)由 Joseph Schorr 创建,用于 Closure 支持对优化后的 JavaScript 代码进行源代码级调试(尽管该格式本身与语言无关)。然而,随着使用 source map 的项目规模不断扩大,格式的冗长开始成为问题。v2 提供一些简单性和灵活性,以减小 source map 的总体大小。即使对 v2 版本的格式进行了更改,source map 文件的大小也限制了其用途。v3 格式基于@podivilov 的建议。
相关文档: Revision 2 proposal
术语
v3 版本格式
目的
格式
第1行:文件整体是一个 JSON 对象。 第2行:文件版本始终是对象中的第一项,并且必须是正整数。 第3行:可选项,与该 source map 关联的转换后的代码文件名。 第4行:可选项,源文件根目录,用于在服务器上重新定位源文件或删除『sources』字段中的重复值。此值将被添加到『sources』字段中的各项前。 第5行:『mappings』使用的源文件的列表。 第6行:可选项,源代码列表,在宿主环境中无法检索源代码时非常有用。内容按与第5行中『sources』项相同的顺序列出。如果应当按名称检索某些原始资源,则可使用『null』。 第7行:『mappings』项所使用的符号名列表。 第8行:编码后的映射数据的字符串。
『mappings』数据结构如下:
每个段中的字段为:
注意:使用谷歌日历进行测试,此编码相对于 V2 格式 source map 的大小减少了 50%。