最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單談談CommonsChunkPlugin抽取公共模塊

 更新時間:2017年12月31日 10:04:21   作者:wonyun  
下面小編就為大家分享一篇簡單談談CommonsChunkPlugin抽取公共模塊,具有很的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

引言

webpack插件CommonsChunkPlugin的主要作用是抽取webpack項目入口chunk的公共部分,具體的用法就不做過多介紹,不太了解可以參考webpack官網(wǎng)介紹;

該插件是webpack項目常用的一個優(yōu)化功能,幾乎在每個webpack項目中都會用到。使用該插件帶來的好處:

提升webpack打包速度和項目體積:將webpack入口的chunk文件中所有公共的代碼提取出來,減少代碼體積;同時提升webpack打包速度。

利用緩存機制:依賴的公共模塊文件一般很少更改或者不會更改,這樣獨立模塊文件提取出可以長期緩存。

但是在項目中,若插件打開方式不正確的話,上面的第二點其實是無法實現(xiàn),因為這種情況下:

沒有被修改過的公有代碼或庫代碼打包出的Entry Chunk,會隨著其他業(yè)務代碼的變化而變化,導致頁面上的長緩存機制失效。

那么,下面就來開啟CommonsChunkPlugin正確的打開方式。

CommonsChunkPlugin不正確用法

假如將我們項目的公共庫如react、react-dom、react-router與業(yè)務代碼隔離,將其提取為vendor chunk,webpack配置如下:

const webpack = require("webpack");
const path = require('path');
module.exports = {
 entry: {
 app: "./app.js",
 vendor: ["react","react-dom", "redux", "react-redux", "react-router-redux"]
 },
 output: {
 path: path.resolve(__dirname, 'output'),
 filename: "[name].[chunkhash].js"
 },
 plugins: [
 new webpack.optimize.CommonsChunkPlugin({names: ["vendor"]})
 ]
};

上面將項目一些基礎(chǔ)庫打包成一個名為vendor的chunk中,并將業(yè)務相關(guān)的代碼打包到一個名為app的chunk中;

webpack打包編譯后的結(jié)果如下:

我們對其中的業(yè)務代碼app.js進行修改后,重新編譯結(jié)果如下:

可以發(fā)現(xiàn),在CommonsChunkPlugin這種配置下,當業(yè)務代碼app發(fā)生變化,而庫代碼也跟著變化,vender的chunkhash也跟著變化,這樣vendor的引用的名稱跟著變化,導致瀏覽器端的長緩存機制失效。

引起問題的原因

引起webpack每次打包編譯時vendor跟著變化的原因:

webpack每次build的時候都會生成一些運行時代碼。當只有一個文件時,運行時代碼直接塞到這個文件中。當有多個文件時,運行時代碼會被提取到公共文件中,也就是上面CommonsChunkPlugin配置的vendor chunk中。

webpack每次編譯時產(chǎn)生的運行時代碼,包括全局webpackJsonp方法的定義和維護模塊依賴關(guān)系,具體可以參考這里的commons.js。

所以,上面webpack的CommonsChunkPlugin配置中,每次編譯時這些代碼都會打包到vendor中,導致每次vendor的chunkhash每次都會變化。

那么,我們可以在對vendor chunk進行配置,抽取其中的公共代碼,即webpack運行時代碼,這樣就可以將項目依賴的基礎(chǔ)庫模塊與業(yè)務模塊隔離開來,因為不會對這些文件進行修改,所以這些文件可達到長緩存的作用。具體配置如下:

module.exports = {
 entry: {
 app: "./app.js",
 vendor: ["react","react-dom", "redux", "react-redux", "react-router-redux"]
 },
 ....
 plugins: [
 new webpack.optimize.CommonsChunkPlugin({names: ["vendor"]}),
 new webpack.optimize.CommonsChunkPlugin({
 name: 'manifest',
 chunks: ['vendor']
 })
 ]
};

這樣,即使修改業(yè)務app代碼,項目依賴的基礎(chǔ)庫vendor chunk也不會發(fā)生變化;只是抽取的manifest chunk每次還會變化,但是這個文件體積非常小,相比vendor來說這種方式的收益更大。如下圖:

修改app代碼后的打包編譯結(jié)果如下,可以看到vendor的chunkhash沒有變化

在webpack中配置CommonsChunkPlugin時需要注意一點:

配置webpack的output項時,其filename和chunkFilename必須使用chunkhash。不要使用hash,否則即使按照上面的配置也不能達到預期的效果。至于hash與chunkhash的區(qū)別,可參考github的回答

以上這篇簡單談談CommonsChunkPlugin抽取公共模塊就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript和jquery獲取父級元素、子級元素、兄弟元素的方法

    JavaScript和jquery獲取父級元素、子級元素、兄弟元素的方法

    本文給大家簡單總結(jié)了下JavaScript和jquery獲取父級元素、子級元素、兄弟元素的方法,非常的簡單實用,有需要的小伙伴可以參考下
    2016-06-06
  • js字符串中空格和換行符(\r,\s,\n,\r\n)淺析

    js字符串中空格和換行符(\r,\s,\n,\r\n)淺析

    我們在使用字符串時經(jīng)常會遇到換行問題,下面這篇文章主要給大家介紹了關(guān)于js字符串中空格和換行符(\r,\s,\n,\r\n)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 在JS中判斷兩個對象是否相等方法詳解

    在JS中判斷兩個對象是否相等方法詳解

    在JavaScript中,判斷兩個對象是否相等有多種方法,取決于你對相等的定義以及對象屬性的類型,本文將介紹幾種常見的方法,感興趣的同學可以參考閱讀
    2023-05-05
  • JavaScript加載速度優(yōu)化方法

    JavaScript加載速度優(yōu)化方法

    通過使用CDN、壓縮、異步加載、盡可能的減少JavaScript文件大小、利用緩存機制、使用Vanilla?JS、使用ES6特性、將JavaScript文件放到底部、減少對DOM的訪問以及避免重復代碼等方法,可以優(yōu)化JavaScript文件的加載和執(zhí)行速度,提供更好的用戶體驗和更高的性能
    2023-08-08
  • JavaScript字符串對象(string)基本用法示例

    JavaScript字符串對象(string)基本用法示例

    這篇文章主要介紹了JavaScript字符串對象(string)基本用法,結(jié)合實例形式分析了js字符串的添加、計算、獲取、替換等操作實現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • 微信小程序scroll-view仿拼多多橫向滑動滾動條

    微信小程序scroll-view仿拼多多橫向滑動滾動條

    這篇文章主要為大家詳細介紹了微信小程序scroll-view仿拼多多橫向滑動滾動條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • js獲取上傳文件的絕對路徑實現(xiàn)方法

    js獲取上傳文件的絕對路徑實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s獲取上傳文件的絕對路徑實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • JavaScript實現(xiàn)N皇后問題算法謎題解答

    JavaScript實現(xiàn)N皇后問題算法謎題解答

    這篇文章主要介紹了JavaScript實現(xiàn)N皇后問題算法謎題解答,N皇后問題是指將N個皇后放置在NxN的國際象棋棋盤上,其中沒有任何兩個皇后處于同一行、同一列或同一對角線上,以使得它們不能互相攻擊,需要的朋友可以參考下
    2014-12-12
  • D3.js實現(xiàn)繪制柱狀圖的教程詳解

    D3.js實現(xiàn)繪制柱狀圖的教程詳解

    這篇文章主要為大家詳細介紹了如何通過D3.js實現(xiàn)繪制柱狀圖,文中的示例代碼講解詳細,對我們學習D3.js有一定的幫助,需要的可以參考一下
    2022-11-11
  • JS實現(xiàn)三個層重疊點擊互相切換的方法

    JS實現(xiàn)三個層重疊點擊互相切換的方法

    這篇文章主要介紹了JS實現(xiàn)三個層重疊點擊互相切換的方法,涉及JavaScript動態(tài)操作頁面定位屬性的相關(guān)技巧,需要的朋友可以參考下
    2015-10-10

最新評論

甘南县| 太谷县| 宝山区| 马关县| 饶河县| 宜城市| 肃宁县| 宁南县| 新晃| 镇原县| 额济纳旗| 商水县| 伊吾县| 岐山县| 龙里县| 浦北县| 宜城市| 浠水县| 瑞金市| 赫章县| 宜都市| 含山县| 棋牌| 吐鲁番市| 平阳县| 永清县| 尼玛县| 涟源市| 喀喇沁旗| 乌恰县| 沅江市| 太仆寺旗| 东丰县| 西充县| 泰顺县| 镇雄县| 盐城市| 安康市| 肥东县| 云梦县| 安西县|