sourceMap
什么是sourceMap,sourceMap 就是我们通过打包插件将源代码打包过后(简称压缩文件)和源文件内容不一致导致出现错误调试时候无从下手。
sourceMap的格式 以.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:记录位置信息的字符串,下文详细介绍。
如何使用soureMap呢?
1.在压缩代码的最后一行加入 //# sourceMappingURL = jquery-3.4.1.min.map 注加入之前必须要有对应的.map文件后面会介绍怎么生成map文件
加入之后如果代码有错误会很容易找到错误 。可以设置个断点查看,执行的就是没压缩之前的js


webpack 配置sourceMap 。sourceMap配置devtool
在webpack.config.js 中加入
devtool:'source-map',

项目打包运行后可以在dist目录中js对应的.map文件 自动生成.map文件

而且呢可以看到下图的bundle.js 最后一行写了 //# sourceMappingURL=bundle.js.map

这时候运行打包项目中错误的地方会直接定位到源码位置
devtool 的所有值
https://webpack.docschina.org/configuration/devtool/#root 官网
eval文档上解释的很明白,每个模块都封装到 eval 包裹起来,并在后面添加//# sourceURLsource-map这是最原始的 source-map 实现方式,其实现是打包代码同时创建一个新的 sourcemap 文件, 并在打包文件的末尾添加//# sourceURL注释行告诉 JS 引擎文件在哪儿hidden-source-map文档上也说了,就是 soucremap 但没注释,没注释怎么找文件呢?貌似只能靠后缀,譬如xxx/bundle.js文件,某些引擎会尝试去找xxx/bundle.js.mapinline-source-map为每一个文件添加 sourcemap 的 DataUrl,注意这里的文件是打包前的每一个文件而不是最后打包出来的,同时这个 DataUrl 是包含一个文件完整 souremap 信息的 Base64 格式化后的字符串,而不是一个 url。eval-source-map这个就是把eval的 sourceURL 换成了完整 souremap 信息的 DataUrlcheap-source-map不包含列信息,不包含 loader 的 sourcemap,(譬如 babel 的 sourcemap)cheap-module-source-map不包含列信息,同时 loader 的 sourcemap 也被简化为只包含对应行的。最终的 sourcemap 只有一份,它是 webpack 对 loader 生成的 sourcemap 进行简化,然后再次生成的。

