【发布时间】:2021-07-14 18:36:14
【问题描述】:
对我来说,这个问题首先在 Webpack 中表现为 ChunkLoadError。正如答案所解释的,它适用于在文件名中使用哈希标记资产并且甚至不特定于 Webpack 的所有场景。
使用 Webpack 进行代码拆分和根据需要延迟加载块。例如,假设它是一个宠物商店的应用程序。首次加载站点时,它会加载主页导航所需的所有 JS。当您浏览到不同的部分时,它会按需加载每个部分的代码。
因此,当您单击菜单中的“海龟”时,它会加载一个名为 turtles.abc123.js 的文件,其中包含所有与海龟相关的代码。 (“abc123”是用于缓存管理的哈希值。)
除了您在浏览时,我们发布了一个新版本,其中对海龟代码进行了一些更改,将 turtles.abc123.js 替换为 turtles.e1337b.js。当您单击海龟部分时,它会尝试加载 turtles.abc123.js,一个不再存在的块,从而导致 ChunkLoadError。
在我看来,解决这个问题的方法是不要删除旧的块文件。只要我们对每次发布都积累一组新的块文件感到满意,这不是问题。 我们很快就会得到数百个文件。 不一定是坏事,但让它无限制地继续下去似乎是不明智的。在某些时候磁盘空间会成为一个问题。
我的下一个想法是删除超过一周的文件,因为几乎不可能有人长时间保持登录状态并注销会刷新页面。
我看不到任何关于在Clean Plugin 或Webpack's output.clean option 中保留文件一段时间的内容。这表明将文件保存在一段时间并不是一种常见的做法。
什么是常见的做法?每个人通常会选择不担心过时的发布问题或不担心累积文件的问题吗?还是有其他我没有考虑过的解决方案?
【问题讨论】:
-
你的思路很扎实。我不担心积累文件。您绝对不想用新版本替换所有文件,从而破坏旧版本的用户,因为它会在某个时候发生。
-
很难安全地自动删除。我不时将其视为手动过程。假设您删除了超过一个月的文件,以确保“安全”。但是一段时间过去了,你有一个好月没有发布新版本。现在最后一个版本被立即删除,让我们回到问题 #1,这可能会破坏最近加载应用程序的用户。您真的想要一种方式来说“从 X 数量的构建中删除文件,但至少一个月前”。如果没有进一步的文件标记,这是不可能自动化的。所以我只是让他们在服务器上建立起来。
-
@CalebMiller 这是一个很好的观点,也是我正在寻找的答案。也许这个问题的措辞应该稍有不同。
-
很高兴它有帮助!我没有写这个作为答案的主要原因是我不能为每个人回答,但也许它仍然应该是一个带有警告的答案。我会写出来的:)
-
谢谢。我担心这个问题会被关闭,因为没有人可以代表所有人,但我找不到更好的表达方式。回想起来,真正的问题是“我不知道我不知道什么。我不知道什么?” :D 希望下一个搜索博客文章或详细解释此问题的内容的人会找到这个问题和答案。
标签: javascript webpack