1. 程式人生 > >淺談Webpack模組打包工具四

淺談Webpack模組打包工具四

Webpack 生產環境優化

生產環境和開發環境有很大的差異,生產環境只注重執行效率,開發環境主要開發效率,webpack4.0開始提出了(mode)模式的概念

針對不同的環境進行不同的配置,為不同的工作環境建立不同的配置。

Webpack不同環境下的不同配置,主要有兩種形式:

1.配置檔案根據環境不同匯出不同配置 主要通過if判斷的形式,這種配置方式只適用於中小型專案

2.一個環境對應一個配置檔案 (多檔案配置) 主要適用於一些大型專案 因為配置檔案較多

一般來說有三個配置檔案 一個開發環境配置檔案 一個生產環境配置檔案 一個公共檔案抽象開發生共同的配置可以把一些處理依賴的

項放到公共配置中比如一些loader等。

舉例寫下一個簡單的生產環境配置檔案

Webpack DefinePlugin

為程式碼注入全域性成員,在生產環境中 這個外掛就會啟用起來,在程式碼中注入了一個process.env.NODE_ENV常量通常用於判斷當前的

執行環境,從而決定是否更改一些操作。

Webpack Tree-shaking及concatenateModules

Tree-shaking 能夠檢測出生產環境中未引用部分,並且清除掉,提升效能,並不是webpack中的某一個配置選項,一組功能搭配使用後

的優化效果,生產模式下自動啟動不是手動模式中,我們可以手動實現配置達到tree shaking效果,並且可以使用concatenateModules

將打包之後的模組合併到同一個函式中,提升執行效率,減少程式碼體積

Webpack Tree Shaking 與 babel

使用Tree Sharking的前提是ES Modules,也就是說Webpack打包的程式碼必須使用ESM,但是當我們處理程式碼時一般會用到babel-loader

處理成CommonJS,按理說這時候Tree Sharking將失效,實際上最新版本的babel-loader已經給我們關閉了es modules外掛,所以說web-

pack打包時還是ES module的程式碼。

Webpack程式碼分割

webpack中所有的程式碼最終都被打包到一起,這樣打包的bundle體積過大,但是並不是每個模組再啟動時都是必要的,所以分包,按需載入

這些模組,加大執行效率,提升效能。所以webpack有了程式碼分包的功能。

目前分包的機制有2種:

1.多入口打包

2.webpack動態匯入功能

需要用到某個模組時,再載入這個模組,所有匯入的模組會被自動分包

Webpack MiniCssExtractPlugin

功能是把css提取出來並壓縮

yarn add mini-css-extract-plugin --dev

Webpack  Hash

生產模式下,檔名使用Hash,一旦我們資源發生改變我們資源名稱也可以一起去變化,對於客戶端全新的檔名也就是全新的請求,

也就沒有了快取的問題

webpack支援三種hash,效果各不相同

1.filename:[name]-[hash].bundle.js 這種hash只要是專案中任何一個地方發生改動,這次打包的hash值都會發生變化。

2.filename:[name]=[chunkhash].bundle.js //檔案發生變化 對應那個檔案同一路的js和css,hash都會發生變化並且對應的hash值為同一

個,對應的主入口檔案也會被動發生變化。

3.filename:[name]=[contenthash].bundle.js //不同的檔案 不同的hash 沒有同一路的說法,哪個檔案改變 哪個檔案對應的hash改