【问题标题】:Declaring dependencies on specific versions of Perl modules using Dist::Zilla使用 Dist::Zilla 声明对特定版本的 Perl 模块的依赖关系
【发布时间】:2017-03-03 14:14:57
【问题描述】:

我一直在工作中的项目中使用 Dist::Zilla,并且我已经在 [Prereqs / Requires] 部分声明了我的所有依赖项。到目前为止还不错。

现在我发现我的一个依赖项的最新版本破坏了向后兼容性,所以我想限制我所依赖的版本范围。类似于cpanm 支持的东西:

# from perldoc cpanm
cpanm Plack~">= 1.0000, < 2.0000"  # latest of 1.xxxx
cpanm Plack@0.9990                 # specific version. same as Plack~"== 0.9990"

Module::Build:

'Other::Module' => '>= 1.2, != 1.5, < 2.0',

一般来说,我如何使用 Dist::Zilla 声明这种依赖类型?

【问题讨论】:

  • 我只是指出您应该非常小心地限制依赖项的最大版本以供参考。虽然该功能存在并且适用于现代工具链,但 CPAN 不是包管理器,因此如果另一个依赖项决定它需要比您允许的更新版本的模块,CPAN 安装程序将无法解决它;您不能安装同一模块的两个版本。此外,没有什么可以阻止稍后的进程安装较新的版本,因为此版本检查只会在您的模块安装时发生。

标签: perl dist-zilla


【解决方案1】:

Dist::Zilla::Prereqs 使用 CPAN::Meta::Spec 来做先决条件。该文档描述了Version Ranges 章节中的语法。

一些字段(prereq, optional_features)表示特定的 可能需要的其他一些模块的版本 先决条件。本节详细介绍了用于 提供此信息。

版本范围最简单的格式就是版本号 本身,例如2.4.这意味着至少版本 2.4 必须是 展示。表明任何版本的先决条件都可以,甚至 如果先决条件根本没有定义版本,请使用版本 0.

或者,版本范围可以使用运算符 (大于), >= (大于或等于), == (等于)和 !=(不等于)。例如,规范

对于更复杂的情况,版本规范可能是 AND-ed 一起使用逗号。规格 >= 1.2, != 1.5,

所以你的先决条件会变成:

[Prereqs]
Plack = >= 1.0000, < 2.0000
Plack = == 0.9990
Other::Module = >= 1.2, != 1.5, < 2.0

注意将模块名称(键)与版本或版本范围(值)分开的单个=

这些版本意味着:

  • >= 1.0000,

    大于等于 1.0000 且小于 2.0000

  • == 0.9990

    正好是 0.9990 版

  • = 1.2, != 1.5,

    大于或等于 12 而不是 1.5 且小于 2.0

如您所见,这与 cpanfile 或 Module::Build 完全相同。

【讨论】:

  • 请注意,我无法验证这一点。
  • (如何编辑 cmets?)我设置了 Search::Elasticsearch = &gt;= 2.03, &lt; 5.00 并升级了 Search::Elasticsearch,现在 listdeps --missing 列出了它。
  • @fab 我认为 = 太多了。你只能说编辑 cmets 五分钟。有编辑链接。如果您的评论是最后一条,您也可以复制、删除、粘贴和添加,然后发布。
  • 我没有出现,我想我需要更多的业力。我认为 dist.ini 仍然需要是有效的 INI;如果我删除 = dzil 抱怨 ``Search::Elasticsearch >' 不是模块名称`。
  • @KitPeters 你是对的。 = 是必需的,因为整个&gt;= 1.2, != 1.5, &lt; 2.0 一起是版本字符串。我现在也看到了。会更新。感谢您指出。
【解决方案2】:

上面的 simbaque 几乎是对的,其余的是 Fabrice Gabolde(我不知道如何链接名称)。

这样做的方法:

[Prereqs]
Plack = >= 1.000, < 2.000
Other::Module = == 1.0
Other::Other::Module = >= 1.2, != 1.5, < 2.0

ETA:simbaque 已经更正了他们的答案;把这个留给后代。

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 2021-06-05
    • 2014-08-22
    • 2013-05-03
    • 1970-01-01
    • 2019-09-22
    • 2015-12-28
    • 2012-05-30
    • 2012-07-19
    相关资源
    最近更新 更多