在上一篇文章中,咱們從零搭建了一個react的基礎項目,其核心是webpack的配置,可是咱們的webpack只是進行了基礎的配置,保證了打包成功和項目的運行。若是咱們想要打包更快呢?css
基於上一篇文章中的webpack,這一篇文章就教你如何優化webpack的配置。前端
PS:上一篇文章看這裏👉從零搭建一個本身的react框架react
刪除無用的css 咱們先準備一份css文件和jsx文件(我們就用上一篇文章中的)jquery
仔細觀察上面的css文件,發現最後一個(.llllas)在jsx中是沒有的,根據咱們的意思,它應該被刪除掉,下面咱們開始配置webpack
首先,安裝插件purgecss-webpack-plugin
git
npm install purgecss-webpack-plugin --save-dev
yarn add ...
cnpm install ...
複製代碼
咱們要注意的是,這個插件須要配合mini-css-extract-plugin
插件一塊兒使用github
第二步,使用web
最後,yarn build
,咱們來看一下效果npm
llllas
樣式了。
就這樣,咱們學會了第一個優化webpack配置的方法。json
圖片壓縮工具
咱們要在file-loader
以前使用image-webpack-loader
,使用方法:
PS:這裏壓縮圖片的配置是直接複製的npm
官網上對image-webpack-loader
使用介紹。
昨天的文章寫到這裏,今天早上就看到webpack團隊發佈了webpack5.0的版本,我們也要有始有終。把這一篇文章寫完🐶
當咱們在HTML頁面用script標籤引入一個cdn,並且呢在寫react的時候咱們也要引入,像這樣(假如引入了jquery
)
咱們並不但願打包cdn引入文件,由於這會形成main.bundle.js
文件體積臃腫,在必定程度上會影響頁面的渲染速度
因此,咱們須要進行如下配置
咱們再打包一下~
jquery
部分的源代碼已經不見了~
咱們至此完成了第三步優化操做
將沒用的代碼刪除,在生產環境下會自動
tree-shaking
咱們來看一下下面的代碼:
在這一段代碼中,hello.js
只是引用了而並無使用,因此咱們指望在打包的時候不會打包hello.js
部分的代碼。接下來,咱們分別在開發環境下和生產環境下打包,這時候發現,不管開發環境仍是生產環境,依然會打印出來hello.js
函數內的內容
這時候,咱們須要去配置不使用反作用,因此在package.json
文件中:
可是,咱們發現,當這樣配置之後,在生產環境下
css
樣式出現了問題,這是因爲這樣配置之後,由於咱們引入css
文件時import ./App.css
,它會默認認爲css
也是反作用,就不會導入css
了
因此,須要咱們更改package.json
的配置,像下面這樣:
這時候,再次在生產環境下運行項目,發現已經再也不打印hello
,css
的樣式也變得正常了
在寫react項目過程當中,常常要引入第三方庫,這樣,在每次從新構建的時候,會很是浪費性能,因此,爲了節約構建時間,咱們能夠先將第三方庫打包成一個動態連接庫,之後構建的時候直接去查找構建好的庫
咱們在index.js
中使用了第三方庫react
、react-dom
,接下來,咱們先對這兩個庫先進行打包
一、在build
文件夾下建立webpack.dll.js
二、在package.json裏面配置命令
三、在項目中引用動態連接庫
四、使用
// 首先打包好第三方庫
npm run build:dll
// 第二步,將項目打包
npm run build
複製代碼
五、效果:
能夠清楚的看到打包時間縮短,達到了優化的目的
顧名思義,動態加載就是咱們須要加載的時候再去加載某些文件
咱們看到,只有當咱們點擊按鈕的時候纔會加載index.js
文件,它不會再頁面啓動的時候就去加載,這樣節省了頁面的加載時間
安裝
webpack-bundle-analyzer
插件並使用
效果以下
happypack
插件可將代碼多線程打包,因此,咱們能夠將不一樣的邏輯交給不一樣的線程來處理
使用happypack前
使用happypack後
咱們能夠看到,打包時間明顯縮短了,因此happypack是一個很好的提升打包速度的手段
以上,就是本篇博客介紹的一些優化手段,其實對於每一個不一樣的項目,配置的webpack
是不同的,因此,咱們要根據這些webpack的基礎知識,去配置適合本身項目的webpack。
本篇博客中全部代碼片斷已上傳至github
上述文章若有不對之處,還請你們積極指出來,讓咱們一塊兒學習,共同在前端的路上越走越遠,愈來愈🐂
最後,分享一下個人微信公衆號,歡迎你們前來關注~