hash:css
hash是跟整个项目的构建相关,构建生成的文件hash值都是同样的,因此hash计算是跟整个项目的构建相关,同一次构建过程当中生成的hash都是同样的,只要项目里有文件更改,整个项目构建的hash值都会更改。缓存
若是出口是hash,那么一旦针对项目中任何一个文件的修改,都会构建整个项目,从新获取hash值,缓存的目的将失效。hash
chunkhash:class
采用hash计算的话,每一次构建后生成的hash值都不同,即便文件内容压根没有改变。这样子是没办法实现缓存效果,咱们须要另外一种hash值计算方法,即chunkhash。打包
chunkhash和hash不同,它根据不一样的入口文件(Entry)进行依赖文件解析、构建对应的chunk,生成对应的hash值。咱们在生产环境里把一些公共库和程序入口文件区分开,单独打包构建,接着咱们采用chunkhash的方式生成hash值,那么只要咱们不改动公共库的代码,就能够保证其hash值不会受影响。程序
因为采用chunkhash,因此项目主入口文件main.js及其对应的依赖文件main.css因为被打包在同一个模块,因此共用相同的chunkhash,可是公共库因为是不一样的模块,因此有单独的chunkhash。这样子就保证了在线上构建时只要文件内容没有更改就不会重复构建方法