Caching 网页包:模块编号的更改不会更改chunkhash

Caching 网页包:模块编号的更改不会更改chunkhash,caching,webpack,Caching,Webpack,我正在使用webpack将我的文件打包成两个文件:app.js和lib.js,我为通过浏览器下载的每个文件创建并附加唯一的chunkhash。这两个文件在同一生成输出中一起生成。它看起来是这样的: lib.747c2ee515b25d871bd0.js app.e6a0b36a5bb2bff41393.js 我在这些文件上设置了以下缓存: Cache-Control:private, max-age=31536000 这意味着这些文件将被缓存一年或新文件到达时。这将对每个文件独立工作 由于我

我正在使用webpack将我的文件打包成两个文件:app.js和lib.js,我为通过浏览器下载的每个文件创建并附加唯一的chunkhash。这两个文件在同一生成输出中一起生成。它看起来是这样的:

lib.747c2ee515b25d871bd0.js
app.e6a0b36a5bb2bff41393.js
我在这些文件上设置了以下缓存:

Cache-Control:private, max-age=31536000
这意味着这些文件将被缓存一年或新文件到达时。这将对每个文件独立工作

由于我们的应用程序即将发布,
app
中的更改比
lib
中的更改要多

问题:我面临的问题是,在新版本中,
lib
的内容没有更改,但模块ID发生了更改。这会导致模块ID更改,但chunkhash不会更改;导致下载
app
,但未下载
lib
,导致app损坏。按Ctrl+F5组合键,一切按预期重新开始工作

问题:更改的模块ID不被视为chunkash的一部分吗?如何解决此问题?是否可以通过WebPack向文件名添加自动递增的显式版本号


任何帮助都将不胜感激。

如果您正在使用
webpack-md5-hash
插件更改webpack-chunkhash,那么您可能正在点击此按钮


另外,这两篇文章可能会有所帮助。

我解决这个问题的方法是在我的文件名中再添加一个数字(即
Date.now()
),如下所示

filename: `[name].${Date.now().valueOf()}.[chunkhash].js`
在可预见的时间内,这种方法非常可靠。这需要理解的是,
Date.now().valueOf()
返回的值是自UTC 1970年1月1日午夜以来的毫秒数。此外,我想在这里实现的是自动生成的值,与前一个不同


这种方法的唯一缺点是:每次发布时,都会强制刷新所有捆绑包。然而,考虑到在前两个版本之后,我们的产品推出频率非常低,这并不是一个太大的问题。

是的,你是对的。我遇到了那个问题。不幸的是,这些解决方案不适用于我,也不能涵盖所有场景:(PSB,我是如何解决的。