2015-08-17 15 views
3

我有一個爲我的Symfony2應用程序的gulp構建過程,並試圖集成緩存清除,但遇到了障礙。我使用gulp-rev將散列追加到我的連接的JavaScript文件並輸出清單文件以映射原始文件和散列文件名。我目前有一個樹枝模板,它有一個腳本標籤來導入我所有正確構建的JavaScript文件,但我需要找到一種方法來更新該腳本標籤,以指向具有正確散列的文件版本,確保新鮮每次散列更改時都會下載該文件的版本。Gulp/Symfony2:如何避免緩存清除時覆蓋我的js/css導入?

我已經想了許多,我向您說明的解決方案的,但沒有人覺得不對勁。有沒有人有一個更好的/正確的解決方案,或者爲什麼我應該採取我已經想到的方式之一的一些推理。

  • 使用gulp-revreplacemy_template.html.twig更換參考app.js是通過在清單文件的映射所定義的app-8de7016eef.js的參考。 問題:這將覆蓋我的實際模板文件,如果命令在我的開發環境中運行,給我留下一個髒git樹和不應該提交的更改。
  • 曾經吞掉存儲在public/html未承諾版本控制輸出的資產模板文件,包括基於它是否PROD上運行/開發環境正確的腳本標籤(即在開發<script src='js/app.js'>,並且<script src='js/app-8de7016eef.js'>上PROD 。我的主要模板可以在@include 'public/html/assets.html.twig'之後,並且永遠不需要被覆蓋。問題:當存在多個互相擴展的模板時,以及在需要由其他塊覆蓋的單獨塊中同時存在CSS和JS時,這會變得越來越複雜它也感覺混亂,從我的吞嚥任務生成和輸出一個樹枝文件
  • 使用資產管理緩存破壞:而不是使用gulp-rev我可以使用{% javascripts 'public/js/app.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %}資產的語法,並讓我處理緩存破壞我。 問題:使用一飲而盡的整點是從assetic移開,如果我必須使用兩個杯和assetic那麼複雜性增加。

那麼有沒有人解決了與吞噬和symfony問題緩存破壞?你是怎麼做到的?

回答

2

你應該充分利用這兩個配置指令:

framework.templating.assets_version 
framework.templating.assets_version_format 

可以在FrameworkBundle的documentation閱讀更多有關他們。

他們與正常的{{ asset() }}函數一起工作,並且不需要需要AsseticBundle。

然後只需在git pre-commit hook中轉儲一個參數/ config-file,即將壓縮的前端源文件文件夾的md5sum分配給assets_version

的.git /鉤/預提交

#!/usr/bin/env sh 

echo "framework.templating.assets_version: $(tar -cf - ./src/Frontend | md5sum)" \ 
> app/config/assets_version.yml 

應用程序/配置/配置。yml

# ... 
imports: 
    # ... 
    - { resource: './assets_version.yml' } 
+0

謝謝,這個作品很棒。我們部分的部署過程將生成assets_version.yml文件,而不是預先提交的鉤子。然後,我簡單地使用' - {resource:'/path/to/assets_version.yml',ignore_errors:true}',以便配置文件在assets_version.yml文件不存在時起作用。 – lukeo05