2-15 webpack中source map是什么?生产环境怎么用?


source map指的是将编译、打包、压缩后的代码映射回源代码的过程

经过webpack打包压缩后的代码基本上已经不具备可读性,此时若是代码抛出错误,想要回溯他的调用栈是非常困难的,而有了source map,加上浏览器调试工具(dev tools),要做到这一点就会变得很容易,同时对于线上问题的追查也有一定帮助。

原理:webpack对于工程源代码的每一步处理都有可能会改变代码的位置、结构、甚至是所处文件,因此每一步都需要生成对应的source map。
sourceMap就是一个信息文件,里面储存着打包前的位置信息。也就是说,转换后的代码的每一个位置,所对应的转换前的位置。具体如何编码。
如果我们启用了devtool配置,那么source map就会跟随源代码一步步被传递,直到生产最后的map文件,这个文件默认就是打包后的文件名字加上后缀.map,例如:bundle.js.map.
在生成map文件的同时,bundle文件中会追加一句注释来标识map文件的位置,例如:

// bundle.js
(function() {
	// bundle的内容
		...
	})()
// # sourceMappingURL = bundle.js.map

map文件只要不打开开发者工具,浏览器是不会加载的

线上环境一般有三种处理方案

hidden-source-map:借助第三方错误监控平台Sentry使用

nosources-source-map:只会显示具体行数以及查看源代码的错误栈。安全性比source map高

source:通过nginx设置将.map文件只对白名单开放(公司内网)

注意的是:避免在生产中使用 inline- 和 eval- ,因为它们会增加bundle体积大小,并降低整体性能。

相关