2017-06-26 26 views

回答

1

不,您不必重新创建Cloudfront发行版。

通常的做法是将散列追加到静态的资产,例如:

<script src="myapp.bundle.js?v=12345678"></script> 

散列通常是文件的MD5/SHA1哈希。有些人可能会使用您构建代码的时间戳。因此,在更新文件内容并发布新部署之后,应该使用新的哈希。考虑下面的流作为客户端:

  1. 客户端请求myapp.bundle.js?v=1
  2. 缓存还不存在,直接的Cloudfront代理请求到S3和缓存内容。
  3. Cloudfront将任何后续请求的缓存内容提供给myapp.bundle.js?v=1
  4. 现在您更新了代码并部署到了S3(在index.html中使用了一个新的散列)。
  5. 客户现在要求myapp.bundle.js?v=2代替
  6. 重复2-3等

哈希追加通常由构建工具如gulpwebpack使用插件来完成。

+0

这实际上是有道理的人,我想试试。我使用了create-react-app,你知道我需要做什么修改才能获得捆绑版本? – nomadus

+0

我相信这样做对你来说已经是https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/config/webpack.config.prod.js#L74 –

+0

我检查过了,它正在向js文件中添加哈希代码,但我没有看到哈希值正在改变。 – nomadus

0

为了使此解决方案完整,create-react-app使用HtmlWebpackPlugin将脚本标记插入到index.html文件中。 要追加的散列,改变node_modules \反应的脚本\设置\ webpack.config.prod.js如下(添加的散列:真线)

new HtmlWebpackPlugin({ 
     inject: true, 
     template: paths.appHtml, 
     minify: { 
     removeComments: true, 
     collapseWhitespace: true, 
     removeRedundantAttributes: true, 
     useShortDoctype: true, 
     removeEmptyAttributes: true, 
     removeStyleLinkTypeAttributes: true, 
     keepClosingSlash: true, 
     minifyJS: true, 
     minifyCSS: true, 
     minifyURLs: true, 
     }, 
     hash:true 
    }), 

要查看的细节,请参阅文档 https://github.com/jantimon/html-webpack-plugin#configuration

+0

不,你不需要添加这样的东西来创建React应用程序。它已经添加了散列。 –

+0

CRA在内部使用Webpack .... –

相关问题