2011-12-20 67 views
0

每這一問題使用MinispadeFilter標識符:Setting up rake-pipeline for use with handlebars alongside Google App Engine你如何自定義耙管道

我使用的是MinispadeFilter爲通過耙管我的依賴關係管理系統。

我看到的奇怪的事情是咖啡腳本和句柄文件將它們的minispade標識符設置爲一個tmp目錄(我假設,工作正在完成)。 screencast.com/t/wixmREcreW

有沒有辦法將它設置爲根路徑,以便它被標準化?同樣,我的js文件雖然沒有指向tmp路徑,卻指向原始資產路徑而不是公共路徑。我知道它只是一個標識符,但是我應該期望它們引用公共路徑嗎? screencast.com/t/k9kZNcPo

回答

3

MinispadeFilter在默認情況下生成模塊標識符相當愚蠢。它只是在輸入文件的路徑之後命名它們。你可以從手柄欄和咖啡腳本中看到tmp dirs,因爲minispade過濾器從管道將它們變成javascript的位置獲取模塊ID。 該過濾器採用:module_id_generator選項,該選項允許您自定義生成模塊ID。如果你不熟悉Ruby,這可能對你有點沉重,請耐心等待。 module_id_generator選項採用Ruby proc,就像JS中的匿名函數。然後過濾器將這個proc傳遞給每個輸入文件並執行它,傳遞一個表示輸入文件的對象,並且你的proc應該返回一個字符串作爲該文件的模塊id。

這裏有一個匹配塊從我的項目之一:

match "**/*.js" do 
    minispade :module_id_generator => proc { |input| input.path.sub(/lib\//, 'timelog/').sub(/\.js$/, '') } 
    concat "js/app.js" 
end 

:module_id_generator是一個進程,這需要FileWrapper命名爲input,並把它變成模塊ID我想要的。輸入文件的路徑可用作input上的path方法。在這種情況下,我的JS文件位於lib/目錄中,所以我使用Ruby的sub方法將lib/部分路徑替換爲timelog(項目名稱),然後再次刪除.js擴展名。因此,名爲lib/models.js的js文件將獲得模塊ID timelog/models

+0

Freakin真棒。很好的解釋。謝謝dudleyf – 2011-12-20 04:10:30