最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解webpack中的hash、chunkhash、contenthash區(qū)別

hash、chunkhash、contenthash

我們注重客戶提出的每個要求,我們充分考慮每一個細(xì)節(jié),我們積極的做好網(wǎng)站設(shè)計制作、成都網(wǎng)站制作服務(wù),我們努力開拓更好的視野,通過不懈的努力,創(chuàng)新互聯(lián)贏得了業(yè)內(nèi)的良好聲譽(yù),這一切,也不斷的激勵著我們更好的服務(wù)客戶。 主要業(yè)務(wù):網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)站設(shè)計,小程序定制開發(fā),網(wǎng)站開發(fā),技術(shù)開發(fā)實力,DIV+CSS,PHP及ASP,ASP.Net,SQL數(shù)據(jù)庫的技術(shù)開發(fā)工程師。

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

項目結(jié)構(gòu)

我們的項目結(jié)構(gòu)很簡單,入口文件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是跟整個項目的構(gòu)建相關(guān),只要項目里有文件更改,整個項目構(gòu)建的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')
  ]
 }

根據(jù)上面的配置,我們執(zhí)行webpack命令之后,可以得到下面的結(jié)果

采用hash計算的執(zhí)行結(jié)果1:

詳解webpack中的hash、chunkhash、contenthash區(qū)別

執(zhí)行結(jié)果2:

詳解webpack中的hash、chunkhash、contenthash區(qū)別

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

chunkhash

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

chunkhash和hash不一樣,它根據(jù)不同的入口文件(Entry)進(jìn)行依賴文件解析、構(gòu)建對應(yīng)的chunk,生成對應(yīng)的哈希值。我們在生產(chǎn)環(huán)境里把一些公共庫和程序入口文件區(qū)分開,單獨(dú)打包構(gòu)建,接著我們采用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計算的執(zhí)行結(jié)果1:

詳解webpack中的hash、chunkhash、contenthash區(qū)別

執(zhí)行結(jié)果2:

詳解webpack中的hash、chunkhash、contenthash區(qū)別

我們可以看到,由于采用chunkhash,所以項目主入口文件Index.js及其對應(yīng)的依賴文件Index.css由于被打包在同一個模塊,所以共用相同的chunkhash,但是公共庫由于是不同的模塊,所以有單獨(dú)的chunkhash。這樣子就保證了在線上構(gòu)建的時候只要文件內(nèi)容沒有更改就不會重復(fù)構(gòu)建

contenthash

在chunkhash的例子,我們可以看到由于index.css被index.js引用了,所以共用相同的chunkhash值。但是這樣子有個問題,如果index.js更改了代碼,css文件就算內(nèi)容沒有任何改變,由于是該模塊發(fā)生了改變,導(dǎo)致css文件會重復(fù)構(gòu)建。
這個時候,我們可以使用extra-text-webpack-plugin里的contenthash值,保證即使css文件所處的模塊里就算其他文件內(nèi)容改變,只要css文件內(nèi)容不變,那么不會重復(fù)構(gòu)建。

 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].[contenthash].css')
  ]
 }

采用contenthash計算的執(zhí)行結(jié)果1:

詳解webpack中的hash、chunkhash、contenthash區(qū)別

執(zhí)行結(jié)果2:

詳解webpack中的hash、chunkhash、contenthash區(qū)別

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


當(dāng)前標(biāo)題:詳解webpack中的hash、chunkhash、contenthash區(qū)別
文章網(wǎng)址:http://fisionsoft.com.cn/article/jsdcie.html