关于 webpack 长期缓存中的 manifest.js 的问题

2017-07-20 12:00:21 +08:00
 Biwood

是这样的,我的项目使用了 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,但是现在还没有人给出有用的解决方案。或者说,是我的使用方式有问题?

3579 次点击
所在节点    问与答
8 条回复
Tonni
2017-07-20 13:24:52 +08:00
这个问题是 Webpack 自身的问题,官方 repo 里面的 issue 已经很久了,priority 也是很高,但是一直没有修复,建议楼主尝试下 issue 里面提到的解决方案试试: https://github.com/webpack/webpack/issues/1315
Biwood
2017-07-20 17:12:47 +08:00
@Tonni 你发的这个 issue 其实是另外一个问题,按照官方文档的教程,使用 webpack/lib/HashedModuleIdsPlugin 配合 webpack-md5-hash 基本解决了,我是在使用了这两个插件之后产生的新的问题
ChefIsAwesome
2017-07-20 17:18:32 +08:00
处理静态文件缓存的手段自古就有。都是有动手能力的程序员,有些时候不用那么依赖某个工具自带的功能吧。
Biwood
2017-07-20 17:24:41 +08:00
@ChefIsAwesome 使用工具当然不仅仅为了处理缓存问题,可以说缓存问题是最后才考虑的,看中的是工具提供的一整套开发流程,而且参与人数众多,可以找到很多方便的插件
isbase
2017-07-20 23:16:17 +08:00
manifest.[chunkhash].js
Biwood
2017-07-26 15:02:29 +08:00
去掉 webpack-md5-hash 这个插件问题就解决了,结帖
AzraelAdam
2018-10-11 18:44:15 +08:00
请问楼主是怎么实现的增量替换的模式,能把 webpack 的配置发出来参考一下吗
Biwood
2018-10-12 19:41:52 +08:00
@AzraelAdam 没太懂你所说的增量替换是指替换什么,配置我没有存下来,不方便拿取,基本都是参照官方文档来写的没有什么新奇之处

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/376644

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX