webpack - source map

329 阅读1分钟

使用sourcemap是在开发或者生成环境中,方便调试,比如定位报错信息

设置sourcemap,devtool有很多个值可以设置,选择一种 source map 风格来增强调试过程。不同的值会明显影响到构建(build)和重新构建(rebuild)的速度。

image.png

devtool: "source-map"

生成完整的source map 文件

// webpack.config.js

const path = require("path");

module.exports = {
  mode: "development",
  devtool: "source-map", 
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "./build"),
    filename: "bundle.js",
    clean: true,
  },
};

转换后的代码最后一行加注释,指向sourcemap, 如://# sourceMappingURL=bundle.js.map 浏览器根据注释,查找sourcemap,并且根据sourcemap还原代码,方便调试, 浏览器设置中performance里面的source里面的enable javascript source maps 要打开,默认打开的

image.png

image.png

devtool: false,

不生成sourcemap文件

devtool: "none",

不可以自己手写,不写devtool,在生产环境下,就是默认不生成

devtool: "eval"

也不生成sourcemap文件,可以还原源代码 报错行定位不太准确

image.png

devtool: "eval-source-map"

会生成sourcemap,但是以DataUrl形式添加在eval函数后面

image.png

devtool: "inline-source-map"

会生成sourcemap,但是以DataUrl形式添加在打包文件后面

image.png

devtool: "cheap-source-map"

跟 devtool: "source-map"相比,信息更少

devtool: "cheap-module-source-map"

对loader处理过的代码打包效果更好

image.png

devtool: "hidden-source-map"

会生成source map文件,但是没有对这个文件的引用,没有source map信息 可以手动添加引用 //# sourceMappingURL=bundle.js.map

devtool: "nosources-source-map"

不会生成源代码文件,只有错误提示信息

总结

开发阶段,推荐‘source-map’(vue脚手架默认)或者'cheap-module-source-map'(react脚手架默认值),获取更多调试信息;

测试阶段也和开发阶段一样;

生产上不写,不需要sourcemap,节省带宽,也是为了代码安全