webpack实现持久化缓存

172 阅读1分钟
  • 如何通过合理配置webpack去实现每次上线发布的静态资源(CSS,JS,图片)的文件名称都是独一无二的

答:通过配置hash(hash、chunkhash、contenthash)实现

hash

webpack在每次构建的时候,都会产生一个compilation对象,这个hash值就是根据compilation内所有的内容计算而来

任意添加或删除一个模块的依赖或代码,hash都会更改,并且全文共用相同的hash值

image.png

  • 为什么图片的hash值不一致呢? 考虑到图片并不会轻易的变化,所以我们还是希望即使代码有变化,图片没有改变的情况下,图片的hash值还是不要轻易改变。所以在loader内部自己定义的hash

chunkhash

根据不同的入口文件进行依赖文件解析、构建对应的chunk,生成对应的hash值,只要不改动代码,chunkhash就不会改变

contenthash

根据当前文件的内容来计算hash值

总结

  • 服务端设置http缓存头(cache-control)
  • 生成稳定的hash文件名(图片、字体等资源用hash或contenthash。js资源使用chunkhash,css资源使用contenthash)
  • 延迟加载:使用import()方式,或者其他异步加载的方式,动态加载文件分到独立的chunk,以得到自己的chunkhash
  • 把依赖包,通过splitchunk分割出来,因为这部分代码基本上是不会动的