国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > Web服務器 > 正文

詳解webpack中的hash、chunkhash、contenthash區別

2024-09-02 12:20:49
字體:
來源:轉載
供稿:網友

hash、chunkhash、contenthash

hash一般是結合CDN緩存來使用,通過webpack構建之后,生成對應文件名自動帶上對應的MD5值。如果文件內容改變的話,那么對應文件哈希值也會改變,對應的HTML引用的URL地址也會改變,觸發CDN服務器從源服務器上拉取對應數據,進而更新本地緩存。但是在實際使用的時候,這幾種hash計算還是有一定區別。
我們先建一個測試案例來模擬下:

項目結構

我們的項目結構很簡單,入口文件index.js,引用了index.css。然后新建了jquery.js和test.js作為公共庫。

//index.js require('./index.css') module.exports = function(){  console.log(`I'm jack`)  var a = 12 }
//index.css .selected : {   display: flex;   transition: all .6s;   user-select: none;   background: linear-gradient(to bottom, white, black); }

接著我們修改webpack.config.js來模擬不同hash計算

hash

hash是跟整個項目的構建相關,只要項目里有文件更改,整個項目構建的hash值都會更改,并且全部文件都共用相同的hash值

 var extractTextPlugin = require('extract-text-webpack-plugin'),  path = require('path')  module.exports = {  context : path.join(__dirname,'src'),  entry:{  main: './index.js',  vender:['./jquery.js','./test.js']  },  module:{  rules:[{   test://.css$/,   use: extractTextPlugin.extract({   fallback:'style-loader',   use:'css-loader'   })  }]  },  output:{  path:path.join(__dirname, '/dist/js'),  filename: 'bundle.[name].[hash].js',  },  plugins:[  new extractTextPlugin('../css/bundle.[name].[hash].css')  ] }

根據上面的配置,我們執行webpack命令之后,可以得到下面的結果

采用hash計算的執行結果1:

執行結果2:

我們可以看到構建生成的文件hash值都是一樣的,所以hash計算是跟整個項目的構建相關,同一次構建過程中生成的哈希都是一樣的

chunkhash

采用hash計算的話,每一次構建后生成的哈希值都不一樣,即使文件內容壓根沒有改變。這樣子是沒辦法實現緩存效果,我們需要換另一種哈希值計算方式,即chunkhash。

chunkhash和hash不一樣,它根據不同的入口文件(Entry)進行依賴文件解析、構建對應的chunk,生成對應的哈希值。我們在生產環境里把一些公共庫和程序入口文件區分開,單獨打包構建,接著我們采用chunkhash的方式生成哈希值,那么只要我們不改動公共庫的代碼,就可以保證其哈希值不會受影響。

 var extractTextPlugin = require('extract-text-webpack-plugin'),  path = require('path')  module.exports = {  ...  ...  output:{  path:path.join(__dirname, '/dist/js'),  filename: 'bundle.[name].[chunkhash].js',  },  plugins:[  new extractTextPlugin('../css/bundle.[name].[chunkhash].css')  ] }

采用chunkhash計算的執行結果1:

執行結果2:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潼关县| 三河市| 托克逊县| 宁安市| 左贡县| 湖南省| 穆棱市| 招远市| 凭祥市| 维西| 黎川县| 德保县| 开封县| 洪泽县| 神池县| 达孜县| 德格县| 涪陵区| 勐海县| 四川省| 南昌市| 吉木萨尔县| 友谊县| 鲁甸县| 河北省| 延寿县| 舞钢市| 宣城市| 东海县| 四子王旗| 东乡族自治县| 垦利县| 吉首市| 江源县| 盘山县| 定边县| 北京市| 晋州市| 明光市| 师宗县| 平山县|