【问题标题】:Prompt user for options when building a perl module using Dist::Zilla使用 Dist::Zilla 构建 perl 模块时提示用户提供选项
【发布时间】:2012-09-16 00:37:07
【问题描述】:

我有一个模块我想发布到 CPAN,我喜欢使用dzil 进行打包和发布。但是,该模块依赖于外部应用程序,虽然我知道它安装在我的机器上的位置,但我想请用户输入它在他们机器上的安装位置。阅读 Prompt user during unit test in Perl 我看到 ExtUtils::MakeMaker::prompt 做了我想做的事。

在使用 dzil 时我将如何合并它(或类似的东西)?

【问题讨论】:

    标签: perl testing cpan dist-zilla


    【解决方案1】:

    标准的MakeMaker dzil 插件除了基本的 Makefile.PL 之外不支持任何东西。 (好吧,它可以使用File::ShareDir::Install,但这是它的限制。)如果您需要更复杂的安装时行为,则需要使用其他东西。

    我推荐我的MakeMaker::Custom 插件。您编写自己的 Makefile.PL,它可以做任何ExtUtils::MakeMaker 能够做的事情,包括提示信息。您仍然可以让dzildzil build 时间添加您的先决条件等内容,因此您仍然可以使用AutoPrereqs。 (其实我更推荐ModuleBuild::Custom,不过如果你想坚持使用MakeMaker也没关系。)

    注意:您还应该允许在命令行上提供您提示的信息。这将帮助那些试图使用自动构建工具打包您的发行版的人。但这是 MakeMaker 的问题,而不是 Dist::Zilla 的问题。

    【讨论】:

    • 谢谢 - 这对我很有帮助,让我找到了正确的方向:看来我的周末会很有趣!
    【解决方案2】:

    用户根本不应该通过 Dist::Zilla 安装。正如其文档明确指出的那样,它只是一个作者工具。 Dist::Zilla 旨在构建一个通过 EUMM 或 M::B 安装的发行版。

    编辑:鉴于您的评论,我会说,听起来您的构建过程不适合使用 Dist::Zilla,至少始终如一。我建议使用它再次构建它,然后转而使用它构建的 EUMM 或 M::B,根据您的目的对其进行修改并继续开发它。

    【讨论】:

    • 我正在使用 dzil 构建版本。用户没有使用它来安装包。
    • 生成 Makefile.PL 可能是 dzil 为您所做的最不重要的事情。自动化发布过程(这样你就不会犯愚蠢的错误,比如忘记在上传之前运行测试)是一件大事。
    【解决方案3】:

    如果您使用 ExtUtil::MakeMaker 来安装您的发行版,那么您可以使用 dzil 插件 Dist::Zilla::Plugin::MakeMaker::Runner(这很拗口)将自定义 Makefile.PL 与您的 dist 捆绑在一起,而不是生成默认的。

    如果需要,您可以使用promptMakefile.PL 中收集自定义信息。

    【讨论】:

    • 好的,所以这是可能的,但这不是“绕弯子”吗?如果您不能再使用自动生成的 Makefile.PL,那么使用标准工具而不是(不)自动生成它们似乎不是最简单的吗?
    • 我不这么认为。我目前维护一个 dist,它的 Makefile.PL 中有一些自定义内容,并将其转换为 Dist::Zilla,以利用 dzil 提供的所有其他功能,如 perlbrew 测试、git 集成、PodWeaver 生成等。
    • 如果您确实使用了这些功能,那么也许您是对的。我没有,所以我从 dzil 搬回了 M::B。当然是 TIMTOWTDI :-)
    • 我推荐使用我的 MakeMaker::Custom 插件而不是 MakeMaker::Runner。这使您可以从 dzil 获取先决条件。
    猜你喜欢
    • 2019-10-03
    • 2013-05-03
    • 2014-08-22
    • 2017-03-03
    • 2014-11-20
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多