5

我一直在将 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 声明这种类型的依赖关系?

4

2 回答 2

5

Dist::Zilla::Prereqs使用 CPAN::Meta::Spec 来做 prereqs。该文档描述了版本范围一章中的语法。

某些字段(prereq、optional_features)指示可能需要作为先决条件的某些其他模块的特定版本。本节详细介绍了用于提供此信息的版本范围类型。

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

或者,版本范围可以使用运算符 <(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)和 !=(不平等的)。例如,规范 < 2.0 意味着任何低于 2.0 的先决条件版本都适用。

对于更复杂的情况,可以使用逗号将版本规范与在一起。规范 >= 1.2, != 1.5, < 2.0 表示必须至少为 1.2、小于 2.0 且不等于 1.5 的版本。

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

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

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

这些版本意味着:

  • >= 1.0000,< 2.0000

    大于或等于 1.0000 且小于 2.0000

  • == 0.9990

    正是版本 0.9990

  • = 1.2, != 1.5, < 2.0

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

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

于 2016-10-21T10:13:18.347 回答
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 已经纠正了他们的答案;把这个留给后代。

于 2017-02-22T17:38:15.010 回答