10

我目前正在使用“react-scripts build”构建和部署我的 create-react-app 站点,然后将构建目录的内容复制到 apache web 目录。web 目录包含一个 index.html 文件,该文件通过如下脚本标记指向已编译的 React js 文件:

<script type="text/javascript" src="/static/js/main.dd92ea42.js"></script>

这就是“react-script build”的所有内置行为。我发现即使创建了一个新的 index.html 文件,并且它的内容发生了变化(该 .js 文件的路径随每次部署而变化),浏览器仍会缓存整个应用程序。即使对网站进行“硬”刷新也不会加载新内容。我必须完全删除缓存,然后重新加载以刷新任何内容。

使用 create-react-app 进行缓存和通过 react-scripts 构建是否有一些技巧?我假设浏览器仅在没有缓存应用程序的情况下查看 index.html 文件,并且不再查看它?否则我不明白为什么在我重新部署时它没有看到对 index.html 文件的更改。

那么,部署一个 create-react-app 应用程序的技巧是什么,这样每次部署都会使浏览器的缓存失效,并且用户无需费劲就可以获取新版本?

4

1 回答 1

0

这取决于您的部署管道是如何设置的。可能有多个层的缓存:

  • 如果您使用 CDN,它可能会缓存在那里。
  • 正如您的评论一样,服务人员可能正在缓存它。
  • 根据您的 Apache 服务器的配置方式,它可能不会“热交换”新文件并将它们加载到内存中。对我来说,我部署到一个 nginx Web 服务器,需要重新启动它才能将新文件重新加载到内存中。
  • 听起来您已经确保浏览器没有通过硬刷新进行缓存。

最后,我不太确定您如何指向硬编码的 main.[xxxyyyzz].js 文件,因为如果下划线源文件发生更改,哈希片段也会更改。

于 2018-10-21T19:36:46.113 回答