2012-09-09 65 views
4

有沒有辦法在文件中有用戶定義的參數,然後讓dist.ini設置參數的值。例如,一個文件可能包含{{$THE_ANSWER}}dist.ini文件會提供一個值,如THE_ANSWER = 42?我對使用dist::zilla來處理perl發行版很新,並且在理解如何將文件視爲模板時遇到問題。似乎只有幾個硬編碼的參數,因插件而異,可用於任何文件。其中一個參數是[NextRelease]Changes文件中提供的{{$ NEXT}}變量。我可以使用dist-zilla填充模板文件中的任意字段嗎?

我閱讀了教程,並搜索了CPAN上的模塊,但無法弄清楚這是否可能。使用[GenerateFile]插件將整個文件放在dist.ini文件中並不是一個可接受的解決方法。除了缺乏靈活性和簡單的醜陋之外,似乎不可能以這種方式添加具有領先空白的行。

回答

5

我會做的是使用存儲或插件來存儲變量。存儲就像插件,但它們不會什麼,但存儲數據,並且它們可以放入您的全局配置以及您的dist.ini

[%Vars] 
favorite_pie = pumpkin 

然後你就可以得到他們這樣的:

$zilla->stash_named('%Vars')->favorite_pie 

這是假設你所做DIST ::吉拉::藏匿::瓦爾和給它一個favorite_pie屬性。

儘管如此,您可以創建一個完全通用的存儲器,它接受任何關鍵字。爲此,我會查看Dist :: Zilla :: Plugin :: Prereqs的來源,它允許任意配置選項並將它們推入其BUILDSARGS方法中的哈希屬性中。

你可以做,當你想爲不同的原因DIST ::吉拉::藏匿::通用的,然後將其註冊多次:

[%Generic/Pies] 
favorite = pumpkin 
hated  = rhubarb 
firstever = quince 

[%Generic/Passwords] 
pause = PeasAreDelicious 
google = secret 
reddit = SecretPeasAreDelicious 

...然後,根據需要,在說模板...

{{ $zilla->stash_named('Passwords')->get_var('pause' }} 

如果我做了很多是使用這種通用的東西的文件,我想通過他們的文字::模板實例封閉稱爲get_password這樣的:

get_password => sub { $zilla->stash_named('Passwords')->get_var($_[0]) } 

然後你的模板可能包括:

Login with: {{ get_password("pause") }} 

這個答案顯然讓一些源挖你,但我認爲它應該在所有我原本是用來做你想做的碎片點。

+0

好吧,我可以用預定義鍵創建一個特定的'Dist :: Zilla :: Stash :: ...'模塊(看起來很簡單),並在'dist.ini'或全局配置中指定值。如果我厭倦編輯並添加新的密鑰,可以創建更通用的解決方案。我有點希望一般情況下是'Dist :: Zilla :: Plugin :: GatherDir :: Template'可以做的事情,而我只是用它錯了;唉。 –

相關問題