我一直在为工作中的项目使用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声明这种类型的依赖关系?
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 完全相同。