webpack推薦將所有可能用到的文件(模塊)都打包。但是這樣做僅適合使用率較高的小體積模塊言疗。對于體積大有不常用的模塊恳邀,反而顯得不適合懦冰。
在webpack工程中直接require線上url。運行的時候會拋出一個異骋シ校——不能找到模塊刷钢,那是因為對于打包后的js中默認是在這個包內(nèi)查找模塊,或者說webpack工程中的require函數(shù)默認是在包(文件)內(nèi)找乳附,壓根兒就沒打算發(fā)起http請求内地。
webpack官方給出了解決方案——Code Splitting。
還是All in one 還是打包成一個包赋除,還是在包內(nèi)部找模塊阱缓,只是這一個包不一定只有一個文件。我們直譯Code Splitting為“代碼拆分”举农,也就是說我們可以理解為將all in one的包再拆成多個包茬祷,當需要引用的時候再引用下載、加載并蝗,只是這種加載是通過webpack內(nèi)部機制發(fā)起http請求實現(xiàn)的。我們將某個不常用的大體積模塊從包中分離出來秸妥,當包內(nèi)的語句引用到了這個模塊后滚停,webpack會判斷這個模塊是被分離出去的,應當發(fā)起http請求拉取粥惧。不是不能拉向上模塊键畴,只是只拉和自己有淵源的模塊。
webpack通過require.ensure知道這個模塊被分離了突雪。通過不同的API就相當于一種標記起惕,在打包時分出去、引用時發(fā)請求動態(tài)加載咏删。我要引用A惹想、B、C督函、D 四個插件嘀粱,A、C可能往往一起用辰狡,B锋叨、D可能往往一起用。我就需要在webpack打包后生成3個文件:包含主文件的js(大量常用模塊)宛篇、包含A和C的分離包娃磺、包含B和D的分離包。
這時會生成三個文件bundle.js,bundle1.js,bundle2.js叫倍,會先加載bundle.js偷卧,然后在內(nèi)部動態(tài)加載bundle1.js和bundle2.js豺瘤。默認在同級目錄下找,可配置其余目錄涯冠。
作用:可以將第三方插件與業(yè)務代碼分離出來炉奴,最大化利用緩存。減少請求蛇更。