使用Dist :: Zilla声明对特定版本的Perl模块的依赖

Fab*_*lde 5 perl dist-zilla

我一直在为工作中的项目使用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"
Run Code Online (Sandbox Code Playgroud)

Module::Build

'Other::Module' => '>= 1.2, != 1.5, < 2.0',
Run Code Online (Sandbox Code Playgroud)

通常,如何使用Dist :: Zilla声明这种类型的依赖关系?

sim*_*que 6

Dist::Zilla::Prereqs使用 CPAN::Meta::Spec 来执行先决条件。该文档描述了“版本范围”一章中的语法。

某些字段(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
Run Code Online (Sandbox Code Playgroud)

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

这些版本意味着:

  • >= 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 完全相同。