Skip to content

source-map介绍

本文系统解析source-map核心功能,详细对比eval、source-map、hidden-source-map等7种生成模式的差异特性。通过分析行映射精度、构建速度、文件体积等维度,说明开发环境推荐使用cheap-module-source-map的原因。结合生产环境实际需求,给出禁用source-map的安全建议及性能优化方案,帮助开发者合理运用调试工具提升工程化效率。

1. eval (默认)

每个module会封装到eval里包裹起来执行,并且会在末尾追加注释(用来关联到map以锁定行数)

2. source-map

生成一个SourceMap文件

3. hidden-source-map

和source-map一样,但不会在bundle末尾追加注释

把source-map文件打包出来,但不在module中关联,也就不能锁定代码行数了

4.inline-source-map

生成一个DataUrl形式的SourceMap

不会单独把source-map文件打包出来,直接放在module中的eval函数里,能锁定代码行数

5.eval-source-map

每个module会通过eval()来执行,并且生成一个DataUrl形式的SourceMap

不会单独把source-map文件打包出来,直接放在bundle中的eval函数里,能锁定代码行数

6. cheap-source-map

生成一个没有列信息(column-mappings)的SourceMap文件,不包含loader的sourcemap(比如babel的sourcemap)

与source-map相比,只是没有列信息,我们查看报错的时候通常只需要知道行数,可以减少sourceMap文件大小

7. cheap-module-source-map

生成一个没有列信息(column-mappings)的SourceMap文件,loader的sourcemap也被简化为只包含对应行的

推荐开发环境使用,能生成map文件,不记录列数,对于babel解析的source-map,不会导致行数识别问题。

总结:

生产环境一般不用sourcemap功能,原因如下:

  • 通过bundle和sourcemap文件可以反编译成源码,可能会导致源码暴露
  • 生产环境一般使用更为小巧的bundle,soucemap文件体积太大

Last updated: