我有一个要发布到 CPAN 的模块,我喜欢使用dzil进行打包和发布。但是,该模块依赖于外部应用程序,虽然我知道它安装在我的机器上的位置,但我想请用户输入它在他们机器上的安装位置。在 Perl 的单元测试期间阅读了Prompt user我看到 ExtUtils::MakeMaker::prompt 做了我想做的事情。
使用 dzil 时,我将如何合并它(或类似的东西)?
我有一个要发布到 CPAN 的模块,我喜欢使用dzil进行打包和发布。但是,该模块依赖于外部应用程序,虽然我知道它安装在我的机器上的位置,但我想请用户输入它在他们机器上的安装位置。在 Perl 的单元测试期间阅读了Prompt user我看到 ExtUtils::MakeMaker::prompt 做了我想做的事情。
使用 dzil 时,我将如何合并它(或类似的东西)?
标准的MakeMaker dzil 插件只支持基本的 Makefile.PL。(嗯,它可以使用File::ShareDir::Install,但这是它的限制。)如果您需要更复杂的安装时行为,您将需要使用其他东西。
我推荐我的MakeMaker::Custom插件。您编写自己的 Makefile.PL,它可以做ExtUtils::MakeMaker能够做的任何事情,包括提示信息。您仍然可以随时dzil
添加诸如先决条件之类的内容dzil build
,因此您仍然可以使用AutoPrereqs。(实际上,我推荐ModuleBuild::Custom,但如果你想坚持使用 MakeMaker,那没关系。)
注意:您还应该允许在命令行上提供您提示的信息。这将帮助那些试图使用自动构建工具打包您的发行版的人。但这是一个 MakeMaker 问题,而不是 Dist::Zilla 问题。
用户根本不应该通过 Dist::Zilla 安装。正如其文档明确指出的那样,它只是一个作者工具。Dist::Zilla 旨在构建通过 EUMM 或 M::B 安装的发行版。
编辑:鉴于您的评论,我会说,听起来您的构建过程不适合使用 Dist::Zilla,至少始终如一。我建议使用它再次构建它,然后转向使用它构建的 EUMM 或 M::B,根据您的目的对其进行修改并继续开发它。
如果您使用 ExtUtil::MakeMaker 来安装您的发行版,那么您可以使用 dzil 插件Dist::Zilla::Plugin::MakeMaker::Runner(这是一口)将自定义Makefile.PL
与您的 dist 捆绑在一起,而不是生成默认一个。
如果需要,这将允许您prompt
从内部收集自定义信息。Makefile.PL