4

有什么方法可以在文件中包含用户定义的参数,然后dist.ini设置参数的值。例如,一个文件可能包含{{$THE_ANSWER}}并且该dist.ini文件将提供一个类似的值THE_ANSWER = 42?我对使用dist::zillaperl 发行版非常陌生,并且在理解它将文件视为模板的方式时遇到了问题。似乎只有几个硬编码参数,因插件而异,可用于任何文件。[NextRelease]一个这样的参数是文件中提供的 {{$NEXT}} 变量Changes

我通读了教程并搜索了 CPAN 上的模块,但不知道这是否可能。[GenerateFile]使用插件将整个文件放入文件中是不可接受的解决方法dist.ini。除了缺乏灵活性和单纯的丑陋之外,似乎不可能以这种方式添加带有前导空白的行。

4

1 回答 1

5

我要做的是使用存储或插件来存储变量。Stashes 就像插件一样,但它们除了存储数据之外什么都不,它们可以放入您的全局配置以及您的dist.ini.

[%Vars]
favorite_pie = pumpkin

然后你可以这样处理它们:

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

这假设您已经创建了 Dist::Zilla::Stash::Vars 并为其赋予了 favorite_pie 属性。

不过,您可以制作一个完全通用的存储,它接受任何东西作为密钥。为此,我将查看 Dist::Zilla::Plugin::Prereqs 的来源,它允许任意配置选项并将它们推入其BUILDSARGS方法中的哈希属性中。

您可以创建 Dist::Zilla::Stash::Generic,然后出于不同原因将其注册多次:

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

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

...然后,根据需要,在模板中说...

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

如果我正在制作很多使用这种通用东西的文件,我会传递他们的 Text::Template 实例一个get_password像这样调用的闭包:

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

那么你的模板可以包括:

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

这个答案显然会为您留下一些来源,但我认为它应该指向我用来做您想做的所有事情。

于 2012-09-10T19:49:56.267 回答