我可以在模板文件中填充dist-zilla填充任意字段吗?

Stu*_*rys 4 perl perl-module dist-zilla

有没有办法在文件中有一个用户定义的参数,然后dist.ini设置参数的值.例如,文件可能包含{{$THE_ANSWER}},dist.ini文件将提供类似的值THE_ANSWER = 42?我很高兴使用dist::zillaperl发行版,我在理解它如何将文件视为模板时遇到了问题.似乎只有几个硬编码参数,可以通过插件改变,可以用于任何文件.一个这样的参数是可用的{{$ NEXT}}变量[NextRelease]Changes的文件.

我阅读了教程并在CPAN上搜索了模块,无法确定这是否可行.使用[GenerateFile]插件将整个文件放在文件中是不可接受的解决方法dist.ini.除了缺乏灵活性和简单的丑陋之外,似乎不可能通过这种方式添加具有领先白色空间的线条.

rjb*_*jbs 5

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

[%Vars]
favorite_pie = pumpkin
Run Code Online (Sandbox Code Playgroud)

然后你就可以这样对待他们:

$zilla->stash_named('%Vars')->favorite_pie
Run Code Online (Sandbox Code Playgroud)

这假设你已经创建了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
Run Code Online (Sandbox Code Playgroud)

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

{{ $zilla->stash_named('Passwords')->get_var('pause' }}
Run Code Online (Sandbox Code Playgroud)

如果我制作了大量使用这种泛型的文件,我会给它们的Text :: Template实例传递一个这样的闭包get_password:

get_password => sub { $zilla->stash_named('Passwords')->get_var($_[0]) }
Run Code Online (Sandbox Code Playgroud)

然后您的模板可能包括:

Login with: {{ get_password("pause") }}
Run Code Online (Sandbox Code Playgroud)

这个答案显然会留给你一些消息来源,但我认为应该指出我用来做你想做的所有事情.