<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        使用CommonsChunkPlugin如何做才能抽取公共模塊

        來源:懂視網 責編:小OO 時間:2020-11-27 19:37:07
        文檔

        使用CommonsChunkPlugin如何做才能抽取公共模塊

        引言;webpack插件CommonsChunkPlugin的主要作用是抽取webpack項目入口chunk的公共部分,具體的用法就不做過多介紹,不太了解可以參考webpack官網介紹。該插件是webpack項目常用的一個優化功能,幾乎在每個webpack項目中都會用到。使用該插件帶來的好處。提升webpack打包速度和項目體積:將webpack入口的chunk文件中所有公共的代碼提取出來,減少代碼體積;同時提升webpack打包速度。利用緩存機制:依賴的公共模塊文件一般很少更改或者不會更改,這樣獨立模塊文件提取出可以長期緩存。但是在項目中,若插件打開方式不正確的話,上面的第二點其實是無法實現,因為這種情況下。
        推薦度:
        導讀引言;webpack插件CommonsChunkPlugin的主要作用是抽取webpack項目入口chunk的公共部分,具體的用法就不做過多介紹,不太了解可以參考webpack官網介紹。該插件是webpack項目常用的一個優化功能,幾乎在每個webpack項目中都會用到。使用該插件帶來的好處。提升webpack打包速度和項目體積:將webpack入口的chunk文件中所有公共的代碼提取出來,減少代碼體積;同時提升webpack打包速度。利用緩存機制:依賴的公共模塊文件一般很少更改或者不會更改,這樣獨立模塊文件提取出可以長期緩存。但是在項目中,若插件打開方式不正確的話,上面的第二點其實是無法實現,因為這種情況下。
        下面我就為大家分享一篇簡單談談CommonsChunkPlugin抽取公共模塊,具有很的參考價值,希望對大家有所幫助。

        引言

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

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

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

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

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

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

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

        CommonsChunkPlugin不正確用法

        假如將我們項目的公共庫如react、react-dom、react-router與業務代碼隔離,將其提取為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"]})
         ]
        };

        上面將項目一些基礎庫打包成一個名為vendor的chunk中,并將業務相關的代碼打包到一個名為app的chunk中;

        webpack打包編譯后的結果如下:

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

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

        引起問題的原因

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

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

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

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

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

        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']
         })
         ]
        };

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

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

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

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

        上面是我整理給大家的,希望今后會對大家有幫助。

        相關文章:

        有關Vue2.0父子組件間實現派發機制(詳細教程)

        jQuery+SpringMVC中的復選框選擇與傳值實例_jquery

        在SpringMVC中post如何獲取多選框value的值(代碼實例)

        使用Vue如何設置多個Class

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        使用CommonsChunkPlugin如何做才能抽取公共模塊

        引言;webpack插件CommonsChunkPlugin的主要作用是抽取webpack項目入口chunk的公共部分,具體的用法就不做過多介紹,不太了解可以參考webpack官網介紹。該插件是webpack項目常用的一個優化功能,幾乎在每個webpack項目中都會用到。使用該插件帶來的好處。提升webpack打包速度和項目體積:將webpack入口的chunk文件中所有公共的代碼提取出來,減少代碼體積;同時提升webpack打包速度。利用緩存機制:依賴的公共模塊文件一般很少更改或者不會更改,這樣獨立模塊文件提取出可以長期緩存。但是在項目中,若插件打開方式不正確的話,上面的第二點其實是無法實現,因為這種情況下。
        推薦度:
        標簽: 使用 公共 模塊
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲中文字幕无码中文字| 亚洲成a人片在线观看日本| 亚洲综合一区二区国产精品| 91在线免费观看| 亚洲午夜久久久影院| 最近中文字幕大全免费版在线| 亚洲综合色视频在线观看| 久久av免费天堂小草播放| 亚洲一区二区三区无码中文字幕| 中文字幕乱理片免费完整的| 亚洲性日韩精品一区二区三区| 久久er国产精品免费观看8| 久久久久久久综合日本亚洲| 免费91最新地址永久入口| 久久青青草原亚洲av无码app| 一级毛片免费观看| 亚洲中文久久精品无码1| 成人免费午夜视频| 美女视频免费看一区二区| 亚洲色欲久久久久综合网| 大地资源在线资源免费观看| 久久久久亚洲av无码专区喷水| 免费观看激色视频网站(性色)| 亚洲一区二区三区在线观看网站| 国产成人精品高清免费| 中文字幕手机在线免费看电影 | 亚洲国产精品碰碰| 任你躁在线精品免费| 亚洲六月丁香六月婷婷蜜芽| 免费无码A片一区二三区| 精品久久亚洲一级α| 中文字幕精品无码亚洲字| 51精品视频免费国产专区| 亚洲日韩精品无码专区加勒比☆| 亚洲成a人在线看天堂无码| 国产自国产自愉自愉免费24区 | 黄色免费在线网址| 亚洲精品成人av在线| 性做久久久久免费看| 免费看少妇高潮成人片| 亚洲无码一区二区三区|