我正在让webpack在输出包filename
中包含一个哈希值,用于缓存失效。当我将构建推送到生产时,发送包含对先前构建的哈希的引用的html文件的客户端将请求该文件。与此同时,如果新版本的文件已替换旧文件,那么这些资产请求将为404。
示例:
bundle.abc123.js
index.html
,其中包含<script src="bundle.abc123.js>
index.html
已发送至浏览器bundle.abc123.js
已被删除(例如,通过clean-webpack-plugin
。新捆绑生成为bundle.def456.js
。index.html
。浏览器请求bundle.abc123.js
。我需要清理/dist
目录,这样我就不会累积所有旧的构建文件。我希望用户在构建完成后很快就会使用旧的引用来为旧文件提供服务。
有没有办法清除所有早于以前版本的文件的目录? (我宁愿不将文件移动到/previous
目录并乱用请求重写。)
示例:
a.js
a.js
并添加b.js
a.js
,离开b.js
,然后添加c.js
c.js
和d.js
,依此类推答案 0 :(得分:0)
我不知道这个解决方案是否理想,但这是我最终的目标。另外,我确信可以通过编写webpack插件来完成,但是在我用MVC框架的语言实现它之前我还没写过,我用的是,把它放在启动/重新启动例程中。无论哪种方式,它都是您希望在发出/dist
文件后发生的事情。
所以最后,尽管webpack将其工件发送到/dist
,但标记中的所有src
和href
引用都引用/assets
,这是真正的交易。我编写的post-webpack代码生成manifest.json
文件以及上面提到的其他步骤。
这将维护当前和之前构建的文件(n和n-1),所有这些文件都在同一文件夹中。不需要重写或查找:只需维护文件,直到下一次构建结束,此时n-1个文件将成为n-2个文件并被清除。
如果有人不喜欢长时间暴露旧文件的想法,你可以将清理移动到一个进程,该进程在构建之后使用你想要的任何方法执行任意时间。