Webpack早已成爲前端開發者必備技能之一,本文從webpack的原理、打包流程以及webpack優化進行分析。webpack配置的文章在網上已經數不勝數了,本文就不做闡述啦。有問題的小夥伴歡迎留言指正~javascript
Webpack把一切都看成模塊,當webpack處理應用程序時,根據給定的一個主文件,遞歸的構建一個關係依賴圖。其中包含應用程序須要的每個模塊,而後把這些模塊打包成一個或多個包。css
Loader: Webpack把一切文件都視爲模塊,可是原生的js只能解析js文件,若是其它文件格式也想打包的話就須要用到loader。因此loader的做用是使webpack擁有了加載和解析非javascript的能力。它也能實現對不一樣格式的文件處理,好比將scss轉換成css、Typescript轉換成js。轉換這些文件,從而使其可以被添加到依賴圖中。前端
Plugin : 用來擴展webpack的功能,讓webpack擁有更多的靈活性。它並非直接操做單個文件,而是直接對整個構建過程起做用。在Webpack運行的生命週期中會廣播出許多事件,Plugin 能夠監聽這些事件,使用自身豐富的Api控制 webpack 打包流程的每一個環節,實現對 webpack 的自定義功能擴展。java
區別總結 : loader實現對不一樣格式文件的處理,轉換這些文件,使其能夠被添加到依賴圖當中。plugin是用來擴展webpack的功能,不是直接操做文件。它由豐富的自定義api和生命週期事件,從而控制webpack打包流程的每一個環節。這是loader作不到的。 webpack
在以上過程當中,Webpack 會在特定的時間點廣播出特定的事件,插件在監聽到感興趣的事件後會執行特定的邏輯,而且插件能夠調用 Webpack 提供的 API 改變 Webpack 的運行結果。 web
webpack
的uglifyjsplugin
來壓縮JS文件, 利用cssnano(css-loader?minimize)
來壓縮css。--optimize--minimize
來實現正確理解webpack背後的原理與基本知識,能夠幫助咱們更好的使用webpack這一利器。但願看了本文的盆友能夠對webpack能夠有個更深刻的認識,使用起來更加駕輕就熟。shell