如果您希望以“webpack方式”实现缓存失效:
1. 输出文件哈希命名
将输出文件名更改为生成的哈希名称(在构建阶段)
output: {
path: '/',
filename: '[hash].js',
chunkFilename: '[chunkhash].js',
},
从那一点开始,你的foo.js
和chunk.1.js
将被称为e883ce503b831d4dde09.js
和f900ab84da3ad9bd39cc.js
。值得注意的是,生成这些文件通常与制作生产和更新cacheBust
值有关。
2. 如何包含名称未知的文件?
从现在起,你的foo.js
- 主文件的名称是未知的。要提取文件名,可以使用AssetsPlugin
。
const AssetsPlugin = require('assets-webpack-plugin');
const assetsPluginInstance = new AssetsPlugin();
并将此插件添加到webpack.config.js
中
plugins: [
assetsPluginInstance
]
在 webpack-assets.json
文件中,你应该能看到类似以下内容的东西:
{
"main": {
"js": "/e883ce503b831d4dde09.js"
}
}
您可以使用此文件来指向主要的.js
文件。有关更多详细信息,请阅读此答案。
3. 受益时间
我猜,如果您由于chunk.2.js
文件的修改而制作应用程序,则会更改文件路径从
- build.js?cacheBust=12345
- chunk.1.js?cacheBust=12345
- chunk.2.js?cacheBust=12345
- chunk.2.js?cacheBust=12345
转向新的对象
- build.js?cacheBust=12346 // modified referation to chunk.2.js file
- chunk.1.js?cacheBust=12346
- chunk.2.js?cacheBust=12346 // modified
- chunk.2.js?cacheBust=12346
如果您使用上述解决方案,您将获得
免费缓存确定。现在文件将被称为
(之前的生产)
。
- e883ce503b831d4dde09.js
- f900ab84da3ad9bd39cc.js
- 5015cc82c7831915903f.js
- 8b6de52a46dd942a63a7.js
(新的生产)
- c56322911935a8c9af13.js // modified referation to chunk.2.js file
- f900ab84da3ad9bd39cc.js
- cd2229826373edd7f3bc.js // modified
- 8b6de52a46dd942a63a7.js
现在只有主文件和chunk.2.js
的名称被更改了,使用webpack方式可以免费获得这些更改。
您可以在这里阅读更多关于长期缓存的信息。
foo.png
和foo.png?v=1
。 - machineghost[chunkhash]
的chunkFilename是打破缓存的最佳方法。如果您将这些文件存储在git中,您可以git rm这些文件,进行构建,然后git add。哈希值未更改的文件将被简单地“恢复”,而哈希值已更改的文件将消失。考虑解决方案,而不是机制。 - boatcoder