hash通常是结合CDN缓存来使用,经过webpack构建以后,生成对应文件名自动带上对应的MD5值。若是文件内容改变的话,那么对应文件哈希值也会改变,对应的HTML引用的URL地址也会改变,触发CDN服务器从源服务器上拉取对应数据,进而更新本地缓存。可是在实际使用的时候,这几种hash计算仍是有必定区别。css
一、hash
webpack
hash是跟整个项目的构建相关,只要项目里有文件更改,整个项目构建的hash值都会更改,而且所有文件都共用相同的hash值web
二、chunkhash
缓存
采用hash计算的话,每一次构建后生成的哈希值都不同,即便文件内容压根没有改变。这样子是没办法实现缓存效果,咱们须要换另外一种哈希值计算方式,即chunkhash。
服务器
chunkhash和hash不同,它根据不一样的入口文件(Entry)进行依赖文件解析、构建对应的chunk,生成对应的哈希值。咱们在生产环境里把一些公共库和程序入口文件区分开,单独打包构建,接着咱们采用chunkhash的方式生成哈希值,那么只要咱们不改动公共库的代码,就能够保证其哈希值不会受影响。spa
三、contenthash
hash
在使用chunkhash的例子中,若是index.css被index.js引用了,那么就会共用相同的chunkhash值。可是这样子有个问题,若是index.js更改了代码,css文件就算内容没有任何改变,因为是该模块发生了改变,致使css文件会重复构建。
这个时候,咱们可使用extra-text-webpack-plugin里的contenthash值,保证即便css文件所处的模块里就算其余文件内容改变,只要css文件内容不变,那么不会重复构建。打包