2017-07-07 28 views
1

我正在使用webpack将我的文件绑定到两个文件:app.js和lib.js,并为每个通过浏览器下载的文件创建并追加独特的chunkhash。这两个文件都在同一个构建输出中构建在一起。它应该是这样的:WebPack:更改模块号码不会改变chunkhash

lib.747c2ee515b25d871bd0.js 
app.e6a0b36a5bb2bff41393.js 

我对这些文件的缓存如下设置:

Cache-Control:private, max-age=31536000 

这意味着,这些文件将被缓存的一年,当一个新的文件到达。这对每个文件独立工作。

由于我们的应用程序更接近发布,因此app中的更多更改比lib更多。

问题:我面临的问题是,在新版本中,lib的内容未更改,但模块ID已更改。这会导致模块ID改变,但chunkhash不会改变;导致下载app但不是lib导致应用程序崩溃。在Ctrl + F5上按预期再次开始工作。

问题:是否将更改后的模块ID视为chunkash的一部分?我该如何解决这个问题?是否可以通过WebPack将自动增量显式版本号添加到文件名?

任何帮助将不胜感激。

回答

1

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

filename: `[name].${Date.now().valueOf()}.[chunkhash].js` 

这对于可预见的时间非常可靠地工作。这是一个谅解,Date.now().valueOf()返回的值是1970年1月1日午夜以来的毫秒数。此外,我想在这里实现的是自动生成的值和与之前不同的值。

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