【发布时间】:2018-12-02 03:35:53
【问题描述】:
我正在尝试在部署到 S3 后为 AWS Cloudfront 提供一个 create-react-app 站点。
部署到 S3 后,index.html 仍在尝试获取旧的 main.xxxxx.js。默认的 service-worker.js 用于在浏览器中缓存站点。
如果您重新加载浏览器,则应用正在正确加载。
service-worker.js 缓存和云端缓存可能会发生冲突。 server-worker 没有得到新上传的 main.xxx.js 而是旧的,而 cloudfront 在我们使现有文件无效后有新的 main.xxxxx.js
再现:
npm run build.
aws s3 sync ./build s3://$S3_BUCKET/frontend --delete --acl 'public-read'
aws cloudfront create-invalidation --distribution-id $CLOUDFRONT_ID --paths '/*'
aws s3 cp ./build/service-worker.js s3://$S3_BUCKET/frontend/service-worker.js --cache-control max-age=0
云端设置为使用原始缓存标头(将使用文件缓存控制标头)
预期行为: 使用上述步骤进行新部署后,当我们第一次尝试访问应用程序时,应该会获取新的 main.xxxx.js 文件并加载更新的内容
【问题讨论】:
-
可以试试 control + shift + R ,可能是从浏览器缓存中加载的,或者你可以清除历史记录
-
如果你重新加载浏览器,应用程序加载正确,这里的期望是什么?
-
我希望页面第一次加载时能够正确加载,但事实并非如此。它需要我重新加载浏览器一次才能正确加载应用程序。
-
您在云端缓存失效后遇到这个问题?在这种情况下,浏览器也会从缓存中加载。所以尝试清理浏览器历史记录或加载它,然后 control + shift + R 应该命中服务器。
-
我忽略了在浏览器中使用
server-worker的缓存站点。如果您知道缓存名称,您可以简单地从工作人员中您喜欢的任何位置调用developer.mozilla.org/en-US/docs/Web/API/CacheStorage/delete...caches.delete(/*name*/);在这里找到..stackoverflow.com/questions/45467842/…
标签: amazon-web-services amazon-s3 amazon-cloudfront create-react-app cache-control