我使用来自AWS的CloudFront,并且拥有一个S3静态网站。 我使用ReactJs,并且更改了大多数页面上的一些文本。 我现在遇到的问题是我使用
npm运行构建
生成生产应用程序。我想更新S3存储桶中AWS上的内容(我之前上传了相同的文件),但是发生了两件事:
-当我以隐身方式访问时,一切正常,我得到了网站的更新版本
-当我使用以前用来访问网站的网络浏览器以普通模式访问时,仍然会得到旧版本的文件。
我访问了AWS documentation,我有两种解决方法:
-等待24小时让CloudFront在边缘位置缓存文件
-使用文件的版本名称(例如,将image.jpg的名称更改为image_1.jpg; image_2.jpg等)
我肯定会选择第二种选择,这确实很耗时,但肯定少于24小时。我应该更改生成的还是静态的EACH文件的名称?
还有其他解决方案吗?
在上传到AWS S3之前,我还没有尝试过创建一个文件夹(例如V1)并上传我的react文件。进行更改时,我将文件夹称为V2,依此类推。
答案 0 :(得分:1)
使用版本名称是最可靠的方法。它使您可以完全控制缓存的行为,而不会弄乱CloudFront。 是的,每次有新版本更新文件名。 顺便说一句,如果您使用create-react-app引导了您的react应用,那么构建过程会默认执行该操作。每次更改包时,它将为每个包命名一个唯一的哈希。这样,您可以在浏览器和CF中利用长期缓存来保存文件。
由于每个部署的名称在版本之间不会更改,因此您可能仍需要使根index.html根目录无效。