原文連接:Webpack 4 — Mysterious SplitChunks Pluginnode
官方發佈了 webpack 4,捨棄了以前的 commonChunkPlugin,增長了 SplitChunksPlugin, 對於這個插件,它的 option 選項有‘initial’、'async'、'all'三個值。我想大多數剛學習 webpack 4 的同窗都不能很好的理解這幾個值的區別,到底每一個選項值意味着什麼呢,這篇文章爲咱們詳細解釋了這幾個值的區別。react
這是個人一個粗略嘗試,經過一個常見的例子來理解和幫助你使用 SplitChunksPlugin 選項。jquery
做爲早期的愛好者,我試圖理解代碼分割 (Code-Spliting) 背後的魔法。文檔說 splitChucnks 接受'initial', 'async', 'all'。我有點困惑,更加提升了個人好奇心。webpack
我深刻研究了文檔的 Github 歷史記錄和 WebpackOptions 概要,並發現,git
「There are 3 values possible 」initial」, 」async」 and 」all」. When configured the optimization only selects initial chunks, on-demand chunks or all chunks.」 — Github History
「Select chunks for determining shared modules (defaults to 「async」, 「initial」 and 「all」 requires adding these chunks to the HTML) 」
— WebpackOptions Schema
複製代碼
這裏的想法是有 a.js 和 b.js 兩個入口文件,而後引用相同的 node_modules。 其中的一些 module 會被動態引入,用來檢驗代碼分割(Code-Spliting)的行爲。github
咱們使用 Webpack Bundle Analyzer Plugin 來幫助咱們理解咱們的 node_modules 是如何被分割的。web
只有 lodash 是動態引入的併發
我選這樣的配置的主要緣由是爲了理解當存在公共庫時,Webpack 配置的表現是如何的async
咱們將保持這些文件不變,並經過 chunks 的值來更改 webpack 的配置。學習
chunks: 'async' 告訴 webpack
」hey, webpack!我只關心動態導入的模塊的優化。你能夠保留非動態模塊「
如今,讓咱們一步一步看看發生了什麼
」hey, webpack!我不關心動態引入的模塊,你能夠爲每個模塊分別建立文件。可是,我但願將全部非動態引入的模塊放在一個 bundle 中,儘管它們還須要引入其餘的非動態引入的木塊,我準備與其餘文件共享和分塊個人非動態導入模塊「
如今,讓咱們一步一步看看發生了什麼
chunks: 'all' 告訴 webpack
」hey, webpack!我不關心這是一個動態仍是非動態引入的模塊。都對它們進行優化。 但要確保......你足夠聰明這樣作「
如今,讓咱們一步一步看看發生了什麼
第一次翻譯,有不少不到位的地方,歡迎指正。地址 github.com/liuhanqu/bl…