- 如何通过合理配置webpack去实现每次上线发布的静态资源(CSS,JS,图片)的文件名称都是独一无二的
答:通过配置hash(hash、chunkhash、contenthash)实现
hash
webpack在每次构建的时候,都会产生一个compilation对象,这个hash值就是根据compilation内所有的内容计算而来
任意添加或删除一个模块的依赖或代码,hash都会更改,并且全文共用相同的hash值
- 为什么图片的hash值不一致呢? 考虑到图片并不会轻易的变化,所以我们还是希望即使代码有变化,图片没有改变的情况下,图片的hash值还是不要轻易改变。所以在loader内部自己定义的hash
chunkhash
根据不同的入口文件进行依赖文件解析、构建对应的chunk,生成对应的hash值,只要不改动代码,chunkhash就不会改变
contenthash
根据当前文件的内容来计算hash值
总结
- 服务端设置http缓存头(cache-control)
- 生成稳定的hash文件名(图片、字体等资源用hash或contenthash。js资源使用chunkhash,css资源使用contenthash)
- 延迟加载:使用import()方式,或者其他异步加载的方式,动态加载文件分到独立的chunk,以得到自己的chunkhash
- 把依赖包,通过splitchunk分割出来,因为这部分代码基本上是不会动的