近期,咱們須要作前端項目的性能優化,因爲咱們的項目都是基於webpack構建,因此頗有必要帶領團隊深刻了解一下webpack。前端
本文做爲團隊內部培訓的前置自學資料,建議參加人員先了解一下當前最新穩定版本 webpack 4.x的平常使用,技術分享的效果會更好!node
本文側重以問答形式,便於你們掌握webpack的核心概念,系統學習建議先簡單過一下中文官網,而後詳細看一下英文文檔!linux
由於當前咱們的項目以webpack3爲主,計劃逐步升級過分到webpack4,所以咱們分享時,重點深刻源碼,探尋webpack4與3的區別,並簡要介紹一下即將發佈的webpack5。webpack
官方定義爲一個JS靜態模塊打包器,經過loader處理非 JS文件,經過plugins 來拓展功能。web
本質上webpack是跑在nodejs環境一個工具合集,它的不少功能咱們不用其餘語言,直接linux使用shell腳本也能夠實現,只是效率低一些。算法
能夠說,是webpack 帶火了nodejs,由於現代的前端主流框架基本都基於它構建。shell
在 import 或"加載"模塊時對模塊的源代碼進行轉換,相似於其餘構建工具中「任務(task)」,如可使用 loader 告訴 webpack 加載 CSS 文件,或者將 TypeScript 轉爲 JavaScript。緩存
webpack的核心是一個編譯器,而插件則用於執行編譯過程當中某些特定的功能,經過 plugin 能夠解決 loader 解決不了的問題,如打包優化和壓縮等,功能極其強大,能夠用來處理各類各樣的任務。性能優化
webpack 插件是一個具備 apply 屬性的 JavaScript 對象。apply 屬性會被 webpack compiler 調用,而且 compiler 對象可在整個編譯生命週期訪問。app
webpack3配置靈活多變,很差控制,使得學習、使用、研究webpack的成本太高(進階曲線太陡),構建一個小應用也須要像構建大應用那樣配置 webpack.config.js。
所以,webpackk4和3最大的區別就是,能夠不使用 webpack.config.js 配置文件,增長了不少默認配置項,針對不瞭解webpack的人員或小應用開發的場景,這樣作無異省時省力。
webpackk4在沒有 webpack.config.js 的狀況下,咱們能夠在命令行中添加入口/出口配置項。
可是原來 webpack.config.js 配置文件中的 module 和 plugins 配置項中的功能實現仍是須要使用 webpack.config.js。
總結以下: