webpack devtool

353 阅读2分钟

简介

webpack devtool可用来控制是否生成以及如何生成source map。或者使用 SourceMapDevToolPlugin/EvalSourceMapDevToolPlugin 进行更细粒度的配置。

语法

  • devtool:string/false

推荐用法

  • 开发环境:eval-source-map // 每个模块使用eval()执行,并且source map转换为DataUrl后添加到eval()中,初始时比较难,重新构建时会很快,行数被正确映射,会映射到原始代码。
  • 生产环境:nosources-source-map // 不暴露源代码,可用于在客户端映射堆栈跟踪,可部署至web-server。

关键词

  • webpack:// webpack 正式的加载source map源码的URL Scheme Protocol,可始终采用此souce-map来调试。
  • webpack-internal:// webpack 内部的加载source map源码的URL Scheme Protocol,用于非 production环境source map

注释

source map是一个将压缩文件中的代码映射回源文件的原始位置的文件。通过在已压缩文件的底部添加特殊注释(//# sourceMappingURL=/path/to/script.js.map//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozL······等),便可以向浏览器指示源映射可用。仅当打开了devtool并且开启了对源文件映射配置时,开发人员工具才会加载此文件。

source map文件包含一个json对象,其中包含有关source map本身和源文件的相关信息,如下:

{
    version: 3,  // 此属性指示文件遵循的source map 规格版本
    file: "js/app.deea0f7e.js", // 转换后的文件名
    sources:[ // 转换前的文件。该项是一个数组,表示可能存在多个文件合并
       "webpack:///webpack/bootstrap",
        "webpack:///./src/App.vue?9b05",
        "webpack:///./src/components/test-upload.vue?d33e",
    ],
    sourceRoot:"", // 转换前的文件所在的目录。如果与转换前的文件在同一目录,该项为空
    sourcesContent:"", // source Map 内容
    names:["slideUp", "slideDown", "save"], // 转换前的所有变量名和属性名
    mappings: "AAA0B,kBAAhBA,QAAOC,SACjBD,OAAOC,OAAO······",  // 记录位置信息的字符串,包含映射逻辑的Base64 VLQ字符串(variable-length-quantity,简称为VLQ,是一种在文本中编码大整数的紧凑方式)
}