Webpack如何配置sourceMap


前言:在寫這篇文章之前,我必須要吐槽一下webpack了。特別喜歡更新版本,更新就算了,文檔還跟不上。文檔真的讓人迷惑了,大爺的。

背景:由於我正在寫sourceMap反向定位源碼的功能,所以最近需要使用到webpack的source-map配置。因為公司webpack的版本有2.0和4.0的,所以在做sourceMap配置的時候,真的是花費了很大的氣力。無力吐槽,我們看正文吧

      ===============================================================================

  =  開源項目:前端監控系統  --- 只需要簡單幾步,就可以搭建一套屬於自己的前端監控系統,快試試吧。 =

  ===============================================================================


SourceMap是一種映射關系。當項目運行后,如果出現錯誤,我們可以利用sourceMap反向定位到源碼。

const path = require('path');

module.exports = {
  devtool: 'none', // SourceMap的模式(見下表)
  entry: './src/index.js',  // 入口文件
  output: {
    filename: 'bundle.js',  // 文件名
    path: path.resolve(__dirname, 'dist')  // 文件夾
  }
}
SourceMap不同模式的特點(見下表)
 
模式 解釋
eval 每個module會封裝到 eval 里包裹起來執行,並且會在末尾追加注釋 //@ sourceURL.
source-map 生成一個SourceMap文件(編譯速度最慢)
hidden-source-map 和 source-map 一樣,但不會在 bundle 末尾追加注釋.
inline-source-map 生成一個 DataUrl 形式的 SourceMap 文件.
eval-source-map 每個module會通過eval()來執行,並且生成一個DataUrl形式的SourceMap.
cheap-source-map 生成一個沒有列信息(column-mappings)的SourceMaps文件,不包含loader的 sourcemap(譬如 babel 的 sourcemap)
cheap-module-source-map 生成一個沒有列信息(column-mappings)的SourceMaps文件,同時 loader 的 sourcemap 也被簡化為只包含對應行的。


1. webpack2.0+; webpack配置 devtool: "source-map" 無效。
 
 sourceMap正確配置如下:
const buildConfig = {
    mode: "production",
    output: {
        path: distPath,
        filename: "./js/[name].[hash].min.js",
        publicPath: "./"
    },
    plugins: [
        new UglifyJSPlugin({ // 1. 這個配置必須
            sourceMap: true
        }),
    ].concat(baseConfig.htmlArray),
    devtool: "source-map" // 2. 這個配置必須
}
2. webpack4.0+; webpack配置 devtool: "source-map" 生成的map代碼沒有 sourcesContent,沒有sourcesContent的結果是你只能定位要壓縮代碼的位置,無法定位到源碼的位置

   sourceMap 正確配置如下:

const buildConfig = {
    mode: "production",
    output: {
        path: distPath,
        filename: "./js/[name].[hash].min.js",
        publicPath: "./"
    },
    optimization: {    // 1. 這個配置必須
        minimize: false
    },
    plugins: [
    ].concat(baseConfig.htmlArray),
    devtool: "source-map" // 2. 這個配置必須
}

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM