Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 AWS Cloudfront未获取最新版本的javascript文件_Amazon S3_Amazon Cloudfront - Fatal编程技术网

Amazon s3 AWS Cloudfront未获取最新版本的javascript文件

Amazon s3 AWS Cloudfront未获取最新版本的javascript文件,amazon-s3,amazon-cloudfront,Amazon S3,Amazon Cloudfront,我正在为我的javascript和css文件实施AWS Cloudfront版本控制,以便Cloudfront缓存能够自动更新,这样我就不必手动使我的文件无效。我在S3中托管一个静态网站内容。我部署新更改的过程如下所示。使用webpack自动散列我的js和css文件来构建网站。Web pack还更新了对my index.html文件中js和css文件的引用(此文件没有版本)。然后,我将新生成的静态网站从dist文件夹复制到S3 bucket中。根据文档,我应该可以自动看到我的更改,而不必使分发版

我正在为我的javascript和css文件实施AWS Cloudfront版本控制,以便Cloudfront缓存能够自动更新,这样我就不必手动使我的文件无效。我在S3中托管一个静态网站内容。我部署新更改的过程如下所示。使用webpack自动散列我的js和css文件来构建网站。Web pack还更新了对my index.html文件中js和css文件的引用(此文件没有版本)。然后,我将新生成的静态网站从dist文件夹复制到S3 bucket中。根据文档,我应该可以自动看到我的更改,而不必使分发版中的每个文件无效,但我不会。我想知道我是否错过了一步。起初,我认为index.html可能需要进行版本控制,但文档明确指出不要对根文档对象进行版本控制。所以我的问题是。。。我错过了什么?包含新版本的js和css文件的index.html文件是否也需要进行版本控制?如果是这样,我如何才能做到这一点


第46页,共:

我为此挣扎了很长时间。最终,我发现以下方法可行:

  • 将新文件上载到s3
  • 使Cloundfront分布无效
  • 将缓存控制设置添加到index.html
  • 对于最后一步,您可以使用AWS CLI:

    aws s3 cp s3://bucket/index.html s3://bucket/index.html 
    --metadata-directive REPLACE --cache-control max-age=0
    

    “根据文档,我应该自动看到我的更改,而不必使分发版中的每个文件无效”根据哪个文档,在哪里?请给我引证。“使用版本控制,您不必等到对象过期后CloudFront才开始为其提供新版本,您也不必为对象失效付费。”明白了吗。这里的基本假设是,index.html文件的
    缓存控制
    头指定的生存期将适当缩短,因此浏览器和CloudFront不会像缓存版本化资产那样缓存它。对,因此,这意味着每次上载新index.html时,我都需要添加cli/api调用来更新缓存控件。我能做到,但似乎很乏味。如果index.html被替换,那么所有的自定义属性也被替换。当将文件上载到S3时,您可以在上载请求中设置所有元数据,包括
    缓存控制
    。没有必要再提出第二个要求。可惜我真的需要更多的解释,我不是这方面的大师!你能进一步优化你的答案吗?我不清楚第一步、第二步和第三步