source map是为了解决开发代码与实际代码不一致时,帮助我们debug到原始开发代码的技术。 webpack通过配置可以自动给我们those maps文件,map文件是一种对应编译文件和源文件的方法。

source map的类型

类型 含义
source-map 原始代码最好的作词map质量有完整的结果,但会很慢
eval-source-map 原始代码同样道理,但是最高的质量和最低的性能
cheap-module-eval-source-map 原始代码(只有行内)同样道理,但是更高的质量和更低的性能
cheap-eval-source-map 转换代码(行内)每个模块儿被eval执行,并且source map作为eval的一个data url
eval 生成代码,每个模块儿都被eval执行并且存在@sourceUrl,带eval的构建模式能cache sourcemap
cheap-source-map 转换代码(行内),生成的sourcemap没有列表映射,从loader生成的source map没有被使用
cheap-module-source-map 原始代码(只有行内)与上面一样,除了每行特点的从loader中进行映射

看似配置相很多,其实只有五个关键字,eval、source-map、cheap、module和inline的任意组合。

关键字 含义
eval 使用eval包裹代码
source-map 产生map文件
cheap 不包含列信息
module 包含loader的sourcemap,否则无法定义源文件
inline 将map 作为data url输入,不单独生成map文件
  • eval eval执行
  • eval-source-map 生成sourcemap文件
  • cheap-module-eval-source-map 不包含列
  • cheap-eval-source-map无法查看到真正的源代码

如何选择sourcemap的类型?

首先,在源代码的列信息是没有意义的,只要有行信息就能完整的建立打包前后代码之间的依赖关系,因此不管是开发还是生产环境都忽略模块打包后的列信息;不管是生产环境还是开发环境,我们都需要定位debug到最原始的资源,比如定位错误到jsx、ts的原始代码而不是经过编译后的js代码;因为需要生成map文件,所以得有source map属性。

总结:

  • 开发环境使用:cheap-module-eval-source-map
  • 生产环境使用:cheap-module-source-map