Source map 想必咱们都不生疏。线上的代码多是紧缩后的,假定线上有报错却只能调试那个代码多半是个噩梦。因而咱们需求有一个桥梁协助咱们建立来历代码及索引webpack阮一峰紧缩后代码的联络,s索引优化ource map 便是起了这个效果appreciate

以下是 MDN 关于 source map 的阐明:

调试原始源代码会比阅读器下app装置下载载的转化后的代码更加简略。 sogoogle商铺urce map阅读器的前史 是从已转化的代码映射到原始源的文件,使appear阅读器能够重构原始源并在调试器中闪现重建的原始源。

可是不知道google服务结构各位读者有没有对 source map 的原理产生过疑问?笔者列出了四个疑问,google地球不知道各位是不是也存在过这样的问题:

绝了,没想到一个 source map 居然涉及到那么多常识盲区

接下来的内容会逐渐为读者答复这四问。

source map 文件是否影响网页功用

这个答案必定apple是不会影响,否则构建相关的优化就必webpack热更新原理定会触及到关于 source map 的阅读器下载appearance理了,究竟webpack打包webpack装备流程 source map 文件也不小。

其实 source map 只要在翻开 dev tools 的状况下才会初步下载,信任大部分用户都不会去翻开这webpack装备个面板,所以这也就appearance不是问题了。

这时或许会有读者想说:哎,可是我好像从来没webpack面试题有在 Network 里看到appstore source map 文件的加载呀?其实这仅仅阅读器APP躲藏了算了,假定咱们运用抓阅读器下载包东西的话就能发现在翻开 dewebpack原理v tools 的appearance时分初步下载 source map 了。

sourgoogle空间ce map 存在规范嘛?

sour阅读器前史记载设置ce map 是存在一个规范的,为 Googapp装置下载le 及 Mozilla 的工索引有哪几种类型程师拟定,文wewebpack效果bpack效果档地址。正是由于存在这份规范,各个打包器及浏阅读器下载webpack打包流程览器才调生成及运用 source map,否则就凌乱阅读器的阅读前史怎样删去了。

各个打包器索引图根柢都依据该库来生成 source mapgoogle谷歌搜索主页,当然也存在一些魔改的方案,可是规范都是一起的。

经过上面的库生成出来的 source map 格局大致如下,咱们也能够比照google空间各个打包器的产品,格局及内容大部分都是一起的:

{
version:阅读器前史记载设阅读器前史记载设置 3,
file: "min.js",
names: ["bargoogle商铺", "bazwebpa阅读器拜访过于频频不能用ck打包原理", "n"APP],
sources: ["one.js", "two.js"],
sourcwebpack原理eRoot: "http://example.com/www索引失效的几种状况/js/",
mappings: "CAAwebpack阮一峰C,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDbappreciate,IAAI,IAAM,SAA阅读器前史记载删了怎样找回UE,GACwebpack阮一峰lB,OAAOA"
}

接下来笔者介绍下重要字段的作索引用:

  • version:望文生义,指代了版别号,现在 source map 规范的版别为 3,也便是说这份 source map 运用的是第三版阅读器前史记载删了怎样找回规范产出的
  • fi索引有哪几种类型le:编译后的文件名
  • namesgoogle谷歌查找主页:一个优化用的字段,后续会在appstore mappings 中用到
  • sourc阅读器看过的视频在哪里es:多个源文件名
  • mappings:这是最重要的内容,标清楚源代码及编译后代码的联络,webpack打包流程可是app装置下载先略过这块,下文中会具体阐明approve

其他大部分运用都是由 webpack 来打包的阅读器看过的视频在哪里,或许有些读者会发现 webpack 的 source map 产出的字段于上面的稍微有些纷歧同。

这是由于 webpack 魔改了一些东西,可是底下仍是依据这个库结束的,仅仅变动了一些不触及索引失效的几种状况中心的字段,具体代码。

阅读器怎样知道源文件和 source map 的联络?

这儿咱们以 webpack 做个实验,webpack原理经过 webpack5 关于以下代码进行打包:

//webpack优化前端性能 indwebpack效果ex.js
constappointment a = 1
consolgoogle翻译e.l阅读器拜访过于频频不能用og(a);

当咱们打开 source map 选项往后,产品应该为两个google谷歌查找主页文件,分别为 bundle.js 以及 bundle.js.map

检查 buwebpack打包原理ndle.jsapp装置下载 文件往后咱们会发现代码中存在这逐一索引符号段注释:

coapp设备下googlenso阅读器前史记载删了怎样找回le.log(1);
//# sourceMappingURL=bundle.js.map

sour索引超出矩阵维度ceMappingURL 便是标记了该文件的 source map 地址。

当然除此之外还有app装置下载其他方法,经过查阅 MDN 文档 发现还google空间能够经过阅读器怎样打开网站 response header 的 SourceMapwebpack优化前端功能: <url> 字段来标明阅读器下载

source map 是怎样对应到源代码的?

这是 source map 最中心的google空间wewebpack是什么东西bpack热更新原理功用,也是最触及webpack面试题常识盲区的app设备下载一块内索引失效的几种状况容。

咱们应该还记得上文中没介绍的 mapping 字段吧,接下来咱们就来具体阅读器如何检查前史阅读记载了解这个字段的用处。

咱们仍是以刚才打包的文google地球阅读器拜访过于频频不能用件为例,来看看产出的 source map 长啥样(去掉了无关紧要的):

{
sources:["webpack://webpack-source-demo/./src/index.js"],
names: ['console', 'log'],
mappin索引是什么意思gs: 'AACA阅读器看过的视频在哪里Aapple,QAAQC,IADE',
}

首要 mapp阅读器前史记载设置ings 的内容其实是 Base64 VLQ 的编码标明。

内容由三部分组成,分别为:

  • 英文,标明源码及紧缩代码的阅读器前史记载设置方位相关
  • 逗号,分隔一行代码中的内容。比如说 consoleaappointmentpp设备下载.log(a) 就由 con阅读器的前史soleloga 三部分组成,所以存在两个逗号。
  • 分号,代表换行

逗号和webpack原理分号想必咱们没啥疑问,可是关于这几个英文内容应该会很困惑。

其实这便是一种紧缩数字内容的编码方法,究竟源代码或许很巨大,用数字标明索引超出矩阵维度行数及列数的话 source maAPPp 文件将也会很巨大,因而选用 Base 64 来代表阅读器的阅读前史怎样删去数字用以削减webpack优化前端性能文件体积。

比如说 A 代表了数字 0,C 代表了数字 1 等等,有喜爱阅读器如何检查前史阅读记载的读者能够经过该网站了解映射联络。

了解了这层编码的映射联络,咱们再来google服务框架聊聊这一串串英文究竟代表了什么。

其实这每阅读器串英文中的字母都代表了一个方位:

  1. 紧缩代码的第几列
  2. 哪个源代码文件,究竟能够多个文件打包成一个,Goog阅读器下载le对应 sources 字段
  3. 源代码第几行
  4. 源代码第几列
  5. names 字段里的索引

这时读者或许有个疑问,为啥没有紧缩代码的第几行标明?这是由于紧缩后的代码就一行,所以只需求标明第几webpack是什么东西列就行了。


更新:有读者问询 Base64 表达的数字是有上限的,假定需求标明的数字很大的话该怎apple样办。实索引符号际上除了每个分号中的第一串英文是用来标明代码的第索引号几行第几列的必定方位之外,后边的都是相appstore关于之前的方位来做加减法的。


了解完以上常识往后,咱们就来依据上文application的内容解析下appointment AACAA 的具体意义吧,经过该网站咱们能够知道 AACAA 对应了 [0,0,1,0,0],这儿需求留心的是数字都从 0 初步,笔者表述的时分会主动加一,webpack是什么东西究竟代码第零行听起来怪怪的。

  1. 紧缩代码的第一列
  2. 第一个源代码文件,也便是 index.js 文件了
  3. 源代码第二行了
  4. 源代码的第一列
  5. namgoogle翻译es 数组中的第一个索引,ap索引怎样做preciate也便是 console

经过以上的解析,咱们就能知道 console 在源代码及紧缩文件中的具体方位了。

可是为什么 source map 会知道编译后的代码具体在什么方阅读器拜访过于频频不能用位呢?这儿就要用到 AST 了。让咱们翻开网站输入 console阅读器前史记载删了怎样找回.log(a) 后查询右边的内容,你应该会发现如图所示的数据:

绝了,没想到一个 source map 居然涉及到那么多常识盲区

webpack面approach试题为 source map 是由 AST 产出的,所以咱们能用上 A索引失效ST 中的这个数据。

source map 的运用

一般来说 so阅读器urapplapplicationece map 的运用都是在监控体系中,开发者构建完运用后,经过插件将源代码及 source map 上传至平台中。一旦客户端上报差错后,咱们就能够经过该索引失效库来复原源代码的报错方位(具体 AP阅读器I 看文档即可),便利开webpack是什么东西发者快速定位线上google谷歌查找主页问题。

究竟

source ma阅读器p 是咱们日常中经常用到的东西,可是直到学习这块内容的时分才知道居然触及到了那么多的常识盲区。

咱们假Google设有什么疑问欢迎在议论区沟通。

绝了,没想到一个 source map 居然涉及到那么多常识盲区