| devtool | build | rebuild | production | quality |
|---|---|---|---|---|
| none | +++ | +++ | yes | bundled code |
| eval | +++ | +++ | no | generated code |
| cheap-eval-source-map | + | ++ | no | transformed code (lines only) |
| cheap-module-eval-source-map | o | ++ | no | original source (lines only) |
| eval-source-map | -- | + | no | original source |
| cheap-source-map | + | o | yes | transformed code (lines only) |
| cheap-module-source-map | o | - | yes | original source (lines only) |
| inline-cheap-source-map | + | o | no | transformed code (lines only) |
| inline-cheap-module-source-map | o | - | no | original source (lines only) |
| source-map | -- | -- | yes | original source |
| inline-source-map | -- | -- | no | original source |
| hidden-source-map | -- | -- | yes | original source |
| nosources-source-map | -- | -- | yes | without source content |
+++ super fast, ++ fast, + pretty fast, o medium, - pretty slow, -- slow看了官網的介紹,有些 Buble Rebuild 速度比較快、有些報錯的資訊跟行數比較準確。各種的 source-map 提供了許多的選擇,但沒有實際使用過,根本不知道設定哪一個比較適合專案。所以我們針對 source-map 每一個參數實際測試,並且記錄觀察結果。
Webpack 打包會處理 Babel 轉譯、minify、uglify,我在首頁新增了一個未宣告的變數如下:
// 未使用 var、let 或 const 宣告的變數
h = 1 + 2
瀏覽器會看到這樣的錯誤

根據不同的 source-map 設定,打包的速度以及顯示的錯誤資訊都不太一樣,下方就錯誤資訊的正確度做了記錄
| devtool | 正確顯示錯誤文件 | 正確顯示錯誤行數 | 打包速度 |
|---|---|---|---|
| none | X | X | +++ |
eval |
O |
X | +++ |
cheap-eval-source-map |
O |
X | + |
| cheap-module-eval-source-map | X | X | O |
eval-source-map |
O |
O |
-- |
| cheap-source-map | X | X | + |
| cheap-module-source-map | X | X | O |
| inline-cheap-source-map | X | X | + |
| inline-cheap-module-source-map | X | X | O |
| source-map | X | X | -- |
| inline-source-map | X | X | -- |
| hidden-source-map | X | X | -- |
| nosources-source-map | X | X | -- |
就資訊正確度來說,只有 eval cheap-eval-source-map eval-source-map 這三種設定,都能夠正確地指出發生錯誤的原始文件,其他的設定最多只能看到 Bundle 後的文件名稱。而顯示錯誤行數的部分 eval-source-map 正確顯示原始檔的行數,其他的設定則只能顯示 Babel 編譯後的行數,而在打包速度的部分 eval 則是官方文件中最快速的設定。因此就這次的測試結果,開發階段我們選擇 eval 作為 source-map 的設定,Production 則設定為 none 不生成 source-map。