webpack.optimize.CommonsChunkPulgin is not a constructor???請看CommonsChunkPlugin VS SplitChunksPlugin

?webpack團隊人員臥薪嘗膽五個多月的時間終于帶來的webpack4+,個人覺得webpack4帶來的最大優化便是對于懶加載塊拆分的優化,刪除了CommonsChunkPlugin,新增了優化后的SplitChunksPlugin,那么CommonsChunkPlugin的痛點在哪?SplitChunksPlugin的優化又是在哪?

1、CommonsChunkPlugin的痛

記得17年始,我剛開始用webpack搭建一個vue的單頁應用框架時,我陸續的拋出了幾個問題:

1、如何避免單頁應用首次的入口文件過大?

這個問題處理起來倒簡單,webpack支持import()語法實現模塊的懶加載,可以做到隨用隨載,也就是除了首頁要用到文件,其他模塊使用懶加載就能有效的避免入口文件過大

2、入口模塊以及剩下的懶加載模塊引用公用的模塊時,代碼會重復嗎?webpack會處理嗎?怎么處理?

代碼重復是肯定的,如果父級模塊中沒有引入懶加載模塊的共用模塊,那么懶加載各模塊間就會出現代碼重復;webpack能處理,那么怎么處理呢?這時CommonsChunkPlugin就信誓旦旦地登場了,它能夠將全部的懶加載模塊引入的共用模塊統一抽取出來,形成一個新的common塊,這樣就避免了懶加載模塊間的代碼重復了,哇!好強大,點個贊。可惜的是,又回到了第一個問題,你把共用的東西都抽出來了,這樣又造成了入口文件過大了。以下是CommonsChunkPlugin時代常用的配置

new webpack.optimize.CommonsChunkPlugin({name: 'vendor',// 引入node_modules的依賴全抽出來minChunks: function (module, count) {// any required modules inside node_modules are extracted to vendorreturn (module.resource &&/\.js$/.test(module.resource) &&module.resource.indexOf(path.join(__dirname, '../node_modules')) === 0)}// 或者直接minChunks: 2,重復模塊大于2的全部抽出來
}),
總之你在代碼重復與入口文件控制方面你得做個平衡,而這個平衡挺不利于多人開發的,也不易于優化.

CommonsChunkPlugin的痛,痛在只能統一抽取模塊到父模塊,造成父模塊過大,不易于優化

2、SplitChunksPlugin的好

前面講了那么多,其實SplitChunksPlugin的登場就是為了抹平之前CommonsChunkPlugin的痛的,它能夠抽出懶加載模塊之間的公共模塊,并且不會抽到父級,而是會與首次用到的懶加載模塊并行加載,這樣我們就可以放心的使用懶加載模塊了,以下是官網說明的一些例子:

假設存在以下chunk-a~chunk-d

chunk-a: react, react-dom, some components

chunk-b: react, react-dom, some other components

chunk-c: angular, some components

chunk-d: angular, some other components

webpack會自動創建兩個chunk模塊,結果如下:

chunk-a~chunk-b: react, react-dom

chunk-c~chunk-d: angular

chunk-a?to?chunk-d: Only the components

SplitChunksPlugin使用官網默認配置基本可以滿足大多數單頁應用了

module.exports = {//...optimization: {splitChunks: {chunks: 'async',minSize: 30000,minChunks: 1,maxAsyncRequests: 5,maxInitialRequests: 3,automaticNameDelimiter: '~',name: true,cacheGroups: {vendors: {test: /[\\/]node_modules[\\/]/,priority: -10},default: {minChunks: 2,priority: -20,reuseExistingChunk: true}}}}
};

以下是我對于多頁應用補充的配置

optimization: {splitChunks: {// 抽離入口文件公共模塊為commmons模塊cacheGroups: {commons: {name: "commons",chunks: "initial",minChunks: 2}}}},

SplitChunksPlugin的好,好在解決了入口文件過大的問題還能有效自動化的解決懶加載模塊之間的代碼重復問題

?

?

資料:沒有了CommonsChunkPlugin,咱拿什么來分包

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247479.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多重表(廣義表)

在深入淺出數據結構系列前面的文章中&#xff0c;我們一直在討論“線性表”&#xff0c;其形式如下&#xff1a; 由a1,a2,a3,……a(n-1)個元素組成的序列&#xff0c;其中每一個元素ai(0<i<n)都是一個“原子”&#xff0c;“原子”的意思就是說元素本身是一個個體&#x…

簡單教你React父子組件間平級組件間傳值

國慶充電特輯&#xff1a; 堵車堵死&#xff0c;廢話不多說直接上菜。 1.父組件對子組件傳值 利用props屬性傳值 class Component extends React.Component {constructor (props) {super(props);}render() {return (<div><h1>I am {this.props.name}</h1>…

Requests庫的主要方法:requests.request為requests.get和requests.post兩個的匯總,只是需要傳方法...

1. requests.request(method,url,**kwargs&#xff09; method&#xff1a;請求方式&#xff0c;對應get/put/post等七種&#xff1a;擬獲取頁面的url鏈接&#xff1a;控制訪問參數&#xff0c;共13個method&#xff1a;請求方式rrequests.request(GET,url,**kwargs) r reques…

jQuery插件開發教程

jQuery插件開發精品教程&#xff0c;讓你的jQuery提升一個臺階 要說jQuery 最成功的地方&#xff0c;我認為是它的可擴展性吸引了眾多開發者為其開發插件&#xff0c;從而建立起了一個生態系統。這好比大公司們爭相做平臺一樣&#xff0c;得平臺者得天下。蘋果&#xff0c;微軟…

Html Email 郵件html頁編寫指南

前言 寫過郵件的html的童學應該都知道&#xff0c;郵件的html一般都用table來布局&#xff0c;為什么呢&#xff1f;原因是大多數的郵件客戶端&#xff08;比如Outlook和Gmail&#xff09;&#xff0c;會過濾HTML設置&#xff0c;讓郵件面目全非。 經過多次的郵件編寫實踐及度…

vue父組件異步獲取動態數據傳遞給子組件獲取不到值

原理&#xff1a; 在父組件中使用axios獲取異步數據傳給子組件&#xff0c;但是發現子組件在渲染的時候并沒有數據&#xff0c;在created里面打印也是空的&#xff0c;結果發現一開始子組件綁定的數據是空的&#xff0c;在請求數據沒有返回數據時&#xff0c;子組件就已經加載了…

MAC 下配置JavaEE開發環境

1、安裝jdk&#xff0c;官網下載 路徑&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html 選擇合適的版本下載即可。 2、配置Java環境變量 &#xff08;1&#xff09;commandspace 輸入termimal 打開終端 &#xff08;2&#xff09;在終端中輸…

微服務深入淺出(7)-- 網關路由Zuul

Zuul用于構建邊界服務&#xff0c;致力于動態路由&#xff0c;過濾&#xff0c;監控&#xff0c;彈性伸縮和安全等方向。 1、ZuulRibbonEureka結合&#xff0c;可以實現智能路由和負載均衡 2、網關將所有服務的API接口統一聚合統一暴露 3、網關統一爆率接口后&#xff0c;可以做…

判斷JavaScript對象為null或者屬性為空

首先說下null與undefined區別&#xff1a; 對已聲明但未初始化的和未聲明的變量執行typeof&#xff0c;都返回"undefined"。 null表示一個空對象指針&#xff0c;typeof操作會返回"object"。 一般不顯式的把變量的值設置為undefined&#xff0c;但null相…

font face如何導入自定義字體

首先&#xff0c;瀏覽器支持什么字體取決于用戶系統里安裝了什么字體&#xff0c;比如CSS中這么寫&#xff1a; font-family:"微軟雅黑","黑體","宋體"; 那么瀏覽器會嘗試按照從左到右的順序依次應用&#xff0c;假設用戶電腦上沒有安裝微軟雅黑…

Python中_,__,__xx__方法區別

_xx 單下劃線開頭 Python中沒有真正的私有屬性或方法,可以在你想聲明為私有的方法和屬性前加上單下劃線,以提示該屬性和方法不應在外部調用.如果真的調用了也不會出錯,但不符合規范. 方法就是以單下劃線開頭命名定義了&#xff0c;這種定義不會被*導入&#xff08;from module …

利用@media screen實現網頁布局的自適應

利用media screen實現網頁布局的自適應 優點:無需插件和手機主題,對移動設備友好,能夠適應各種窗口大小。只需在CSS中添加media screen屬性,根據瀏覽器寬度判斷并輸出不同的長寬值 1280分辨率以上&#xff08;大于1200px&#xff09; media screen and (min-width:1200px){#p…

C# webkit內核 網頁填表

比如我要操作的是下面的input 用到的方法是 調用如下&#xff1a; webkit.StringByEvaluatingJavaScriptFromString("document.getElementsByClassName(login_i_con_li_ipt name)[0].valueThis is a Demo."); 類似這種div在webkit中好像是無法通過常規方法模擬的 這時…

p字間距 html段落內文字設置字間距間隔

只對段落p內文字設置字間距&#xff0c;段落<p>是html段落標簽&#xff0c;以<p>開始&#xff0c;以</p>結束&#xff0c;通常文章分段使用p標簽&#xff0c;而有時小局部布局也可以使用p來布局。通過css設置其樣式實現排版目的。 這里針對p設置字間距&…

基本數據類型

上節回顧 1.循環打印數列1&#xff0c;3&#xff0c;5&#xff0c;.........&#xff0c;99 for i in range(100):if i%21:print (i) 2.turtle 庫 # penup 抬筆 # pendown 落筆 # pensize 畫筆大小 # pencolor 畫筆顏色## 畫筆運動函數 # fd 前進 # bk 后退 # goto 到達指定的坐…

修改系統默認 alert 彈框樣式

修改默認 alert 彈框&#xff0c;思路很簡單&#xff0c;定義一個 alert(e) 函數&#xff0c;加載最開頭即可。 css部分&#xff1a; <style>#msg{width:266px;position: fixed;z-index:999;top: 49%;margin-top:-80px;left:50%;margin-left:-133px;background:#fff;bo…

Code Review的重要性

這幾天一直在搞一家客戶的產品升級動作&#xff0c;數據的轉移已經完成大部分&#xff0c;因為升級主要的目標是處理性能問題&#xff0c;所以我針對性的對將要升級的版本進行了一些操作性能檢查&#xff0c;真是不做不知道&#xff0c;一做嚇一跳&#xff0c;有一個查詢選擇人…

Myeclipse快捷鍵總結大全

Myeclipse快捷鍵 Ctrl1 快速修復 CtrlD: 刪除當前行 CtrlQ 定位到最后編輯的地方 CtrlL 定位在某行 CtrlO 快速顯示 OutLine CtrlT 快速顯示當前類的繼承結構 CtrlW 關閉當前Editer CtrlK 快速定位到下一個 CtrlE 快速顯示當前Editer的下拉列表 CtrlJ 正向增量查找(按…

秋蟬鳴泣之時

奇怪的題目背景 所誤入的 是回憶的教室 所響起的 是通向絕望的計時器 所到達的 是開始的結束 你 能相信嗎? 題目背景 最近禮奈醬學會了線段樹和樹狀數組兩種數據結構 由于禮奈醬上課聽的很認真&#xff0c;所以她知道 樹狀數組常見的操作是 單點加區間求和 線段樹常見的操作是…

對淺拷貝與深拷貝的研究

淺拷貝只復制指向某個對象的指針&#xff0c;而不復制對象本身&#xff0c;新舊對象還是共享同一塊內存。 淺拷貝的實現方式 Object.assign()&#xff1a;需注意的是目標對象只有一層的時候&#xff0c;是深拷貝Array.prototype.concat()Array.prototype.slice()深拷貝就是在拷…