2015-01-12 45 views
2

使用咕嚕的NodeJS和快遞,什麼模塊(S)我應該使用:咕嚕模塊(縣)的所有靜態資產上傳到S3/CloudFront的,替代路徑,並廢止舊資產

  1. 發現通過查看資產目錄或解析代碼庫中的所有靜態資產(前端JS,CSS,圖像)

  2. 將資產上傳到Amazon S3/CloudFront,使用唯一的「指紋」名稱重命名每個文件

  3. 將每個替換爲設置在與CloudFront的URL的codebase路徑這是使用CloudFront的我第一次

  4. 的Invalidate老CDN資產

。我不確定上述所有內容是否都可以使用Grunt完成,或者最好是作爲Node/Express模塊​​來完成。

使用Rails,I've read it's as easy as

# Setup amazon CDN 
config.action_controller.asset_host = "xxxxxxxxxxxxx.cloudfront.net" 

,我正在尋找一個節點堆疊類似的解決方案。

回答

4

使CDN資產無效是一個糟糕的主意®。在CloudFront中,可能需要15分鐘才能完成 - 這將會爲您的部署增加15分鐘。而且,有些瀏覽器可能會保留舊文件,因爲URL是相同的。

相反,您應該使用不同的版本名稱對靜態資產進行版本化併發布新版本。

例如:

my-app/1.2.3/main.js 
my-app/1.2.4/main.js 
於是就

,等等。

這給了你兩個優點:

  • 你可以永遠緩存,理直氣​​壯。相同的URL將始終提供相同的文件。
  • 如果發生災難部署,您可以快速回滾。舊文件是他們的地方。

對於部署到S3,有特定的插件。 但是,我更喜歡在串聯簡單地使用grunt-shell與官方Amazon AWS CLI

配置它會是這個樣子:

shell: { 
    cp: { 
    command: "aws s3 cp --recursive dist/ s3://my-bucket/my-app/" 
    } 
} 

您可以使用咕嚕從某處,並自動把所有閱讀版本變量dist/{version}/文件夾中的文件,同時將html中的任何路徑替換爲正確的version路徑。

+1

絕對災難性回滾是保持內容版本化的重要理由 –

+1

喜歡這種方法。我將使用哪個模塊(3) - 「使用CloudFront URL替換代碼庫中的每個資產路徑?」你用咕嚕聲還是快遞處理? – max

+0

您可以使用[grunt-contrib-copy](https://github.com/gruntjs/grunt-contrib-copy)中的'process'選項。從一個目錄複製到另一個目錄時,只需用正則表達式替換路徑。有更高級的插件,但我發現複製綽綽有餘這個目的。這裏有一個個人的例子:https://github.com/vtex/grunt-vtex/blob/master/lib/config.coffee#L38 – firstdoit