8

我维护了多个 Perl 编写的(unix-ish)应用程序,其当前安装过程包括手动编写Makefile并将配置文件安装到/etc/.

我真的很想将他们的开发切换为使用Dist::Zilla,但到目前为止,我还没有找到任何 Dist::Zilla 插件或功能允许我在运行/etc/make install(或./Build install在使用Module::Build而不是使用的情况下ExtUtils::MakeMaker)将给定文件放入安装我的应用程序的本地管理员。

使用 pure ExtUtils::MakeMaker,我可以在其中定义额外的 make 目标,MY::postamble并让目标通过属性install依赖于其中之一。depend { install => … }做一些类似的事情,但 viadzil build可能就足够了,但我会欣赏一种更明显的方式。

一种正交方法是使应用程序不需要/etc/存在下的文件,而只是切换到 Dist::Zilla 尽管我现在只想更改构建系统,但实际代码似乎发生了很大变化。

对于好奇的人:我目前考虑切换到 Dist::Zilla 的两个应用程序是xen-toolsunburden-home-dir

4

2 回答 2

4

最好的办法是避免/etc从任何 Perl 发行版中安装文件。您无法确保 cpan 客户端(或安装用户)有权在此处安装,并且一个系统上可能安装了多个 Perls,因此它们中的每一个都会破坏/etc另一个安装的文件。您无法真正防止该文件被后续安装覆盖,因此您不应将不想丢失的配置数据放在那里。

您可以将配置文件放在/etc/ 中,如果应用程序知道在那里查找它,但您应该允许自定义该路径(例如在测试系统上,在本地目录中查找文件,或者在用户的家中查找文件目录)。

对于安装只读模块特定数据,Perl 中的最佳实践是安装到特定于 Perl 安装的位置,执行此操作的模块是File::ShareDir::Install。您可以使用[ShareDir] 插件Dist::Zilla::Plugin::ShareDir从Dist::Zilla使用它。它甚至包含在 [@Basic] 插件包中,因此,如果您在.dist.inishare/

要从代码访问共享目录的内容,请使用File::ShareDir

于 2014-09-29T05:07:12.957 回答
2

要将复杂的模块安装程序移植到 Dist::Zilla,我推荐我的插件MakeMaker::CustomModuleBuild::Custom,具体取决于您喜欢的安装程序。这些允许您保留现有的Makefile.PLBuild.PL仅将 Dist::Zilla 插入必要的位,例如依赖项。

于 2014-09-25T14:33:19.507 回答