生成Source Maps(使調試更容易)
開發總是離不開調試,方便的調試能極大的提高開發效率,不過有時候通過打包後的文件,你是不容易找到出錯了的地方,對應的你寫的代碼的位置,Source Maps就是來幫我們解決這個問題的。
通過簡單的配置,webpack就可以在打包時爲我們生成source-maps,這爲我們提供了一種對應編譯文件和源文件的方法,使得編譯後的代碼可讀性更高,也更容易測試。
在webpack的配置文件中配置source maps,需要配置devtool,它有以下四種不同的配置選項,各具優缺點,描述如下:
devtool選項 | 配置結果 |
source-map | 在一個單獨的文件中產生一個完整且功能完全的文件。這個文件具有最好的source map ,但是它會減慢打包速度; |
cheap-module-source-map | 在一個單獨的文件中生成一個不帶列映射的map ,不帶列映射提高了打包速度,但是也使得瀏覽器開發者工具只能對應到具體的行,不能對應到具體的列(符號),會對調試造成不便; |
eval-source-map | 使用eval 打包源文件模塊,在同一個文件中生成乾淨的完整的source map 。這個選項可以在不影響構建速度的前提下生成完整的sourcemap ,但是對打包後輸出的JS文件的執行具有性能和安全的隱患。在開發階段這是一個非常好的選項,在生產階段則一定不要啓用這個選項; |
cheap-module-eval-source-map | 這是在打包文件時最快的生成source map 的方法,生成的Source Map 會和打包後的JavaScript 文件同行顯示,沒有列映射,和eval-source-map 選項具有相似的缺點; |
正如上表所述,上述選項由上到下打包速度越來越快,不過同時也具有越來越多的負面作用,較快的打包速度的後果就是對打包後的文件的的執行有一定影響。
對小到中型的項目中,eval-source-map
是一個很好的選項,再次強調你只應該開發階段使用它,我們繼續對上文新建的webpack.config.js
,進行如下配置:
module.exports = {
devtool: 'eval-source-map',
entry: __dirname + "/app/main.js",
output: {
path: __dirname + "/public",
filename: "bundle.js"
}
}
cheap-module-eval-source-map
方法構建速度更快,但是不利於調試,推薦在大型項目考慮時間成本時使用。