webpack笔记

webpack4(五):sourcemap

2021-06-01  本文已影响0人  姜治宇

什么是sourcemap?

sourcemap,从字面理解就是source+map,源码地图的意思。打包后的代码因为已经压缩混淆过了,这时要想调试就不太容易,我们必须定位到源码的某行才能找到问题所在,因此打包代码时,必须生成一份sourcemap文件,让我们可以达到调试的目的。

sourcemap的几种模式

1、eval

每个module会封装到 eval 里包裹起来执行,并且会在末尾追加注释 //@ sourceURL.

2、source-map

生成一个SourceMap文件.

3、hidden-source-map

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

4、inline-source-map

生成一个 DataUrl 形式的 SourceMap 文件.

5、eval-source-map

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

6、cheap-source-map

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

7、cheap-module-source-map

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

sourcemap如何使用

相关的配置很简单,只需在webpack的配置文件加一行:

let path = require("path");
module.exports = {
    mode:"none",
    entry:"./src/main.js",
    output:{
        filename:"build.js",
        path:path.join(__dirname,"dist")
    },
    devtool:"source-map"
}

这样就开启了sourcemap,打包会生成main.js.map这样的映射文件,但是我们在实际使用时并不推荐直接用source-map选项。因为这样会生成行和列的完整信息,而我们在调试代码时,一般只需定位到行即可,所以推荐cheap模式。
1)开发环境推荐:
cheap-module-eval-source-map
2)生产环境推荐:
cheap-module-source-map

原因

1、使用 cheap 模式可以大幅提高 souremap 生成的效率。大部分情况我们调试并不关心列信息,而且就算 sourcemap 没有列,有些浏览器引擎(例如 v8) 也会给出列信息。

2、使用 eval 方式可大幅提高持续构建效率。官方文档提供的速度对比表格可以看到 eval 模式的编译速度很快。

3、使用 module 可支持 babel 这种预编译工具(在 webpack 里做为 loader 使用)。

4、使用 eval-source-map 模式可以减少网络请求。这种模式开启 DataUrl 本身包含完整 sourcemap 信息,并不需要像 sourceURL 那样,浏览器需要发送一个完整请求去获取 sourcemap 文件,这会略微提高点效率。而生产环境中则不宜用 eval,这样会让文件变得肥肠大。

上一篇 下一篇

猜你喜欢

热点阅读