是这样的,我的项目使用了 webpack 的长期缓存策略。该项目是多页应用,每次打包生成几个页面,但是 vendors 和 manifest 模块是共用的,按理说,只要不修改这两个模块里的内容,他们的 hash 都不会改变的。
问题来了,当 A 页面上线之后,我重新打包生成了一个 B 页面,vendors 和 manifest 的 hash 都没有变化,但是 B 页面上线之后,A 页面却报错了。报错原因是,A 页面不能正确兼容后打包的 manifest.js 里面的代码。虽然 hash 没有变,但是里面的内容却改变了。
按照官方的说法,这个 manifest.js 存放的是运行时相关代码,我一直认为这里的代码是长期不变的,后来用对比软件对比发现,一旦别的模块有调整,这里的代码也会有细微的变化。
有没有什么办法,让 manifest.js 的 hash 也随着内容而改变呢?我 Google 了一下,有人说这是 webpack-md5-hash这个插件的 bug,但是现在还没有人给出有用的解决方案。或者说,是我的使用方式有问题?
1
Tonni 2017-07-20 13:24:52 +08:00
这个问题是 Webpack 自身的问题,官方 repo 里面的 issue 已经很久了,priority 也是很高,但是一直没有修复,建议楼主尝试下 issue 里面提到的解决方案试试: https://github.com/webpack/webpack/issues/1315
|
2
Biwood OP @Tonni 你发的这个 issue 其实是另外一个问题,按照官方文档的教程,使用 webpack/lib/HashedModuleIdsPlugin 配合 webpack-md5-hash 基本解决了,我是在使用了这两个插件之后产生的新的问题
|
3
ChefIsAwesome 2017-07-20 17:18:32 +08:00 via Android
处理静态文件缓存的手段自古就有。都是有动手能力的程序员,有些时候不用那么依赖某个工具自带的功能吧。
|
4
Biwood OP @ChefIsAwesome 使用工具当然不仅仅为了处理缓存问题,可以说缓存问题是最后才考虑的,看中的是工具提供的一整套开发流程,而且参与人数众多,可以找到很多方便的插件
|
5
isbase 2017-07-20 23:16:17 +08:00 via Android
manifest.[chunkhash].js
|
6
Biwood OP 去掉 webpack-md5-hash 这个插件问题就解决了,结帖
|
7
AzraelAdam 2018-10-11 18:44:15 +08:00
请问楼主是怎么实现的增量替换的模式,能把 webpack 的配置发出来参考一下吗
|
8
Biwood OP @AzraelAdam 没太懂你所说的增量替换是指替换什么,配置我没有存下来,不方便拿取,基本都是参照官方文档来写的没有什么新奇之处
|