2017-06-26 29 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 .... –

相關問題