Объявление зависимостей от конкретных версий модулей 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"
Или же Module::Build
:
'Other::Module' => '>= 1.2, != 1.5, < 2.0',
В общем, как мне объявить этот тип зависимости, используя Dist::Zilla?
2 ответа
https://metacpan.org/pod/Dist::Zilla::Prereqs использует CPAN::Meta::Spec для выполнения предварительных требований. Этот документ описывает синтаксис в главе " Диапазоны версий".
Некоторые поля (prereq, option_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.
Симбак выше был почти прав, а Фабрис Габольде отдыхал (я не знаю, как связать имена).
Способ сделать это:
[Prereqs]
Plack = >= 1.000, < 2.000
Other::Module = == 1.0
Other::Other::Module = >= 1.2, != 1.5, < 2.0
ETA: с тех пор simbaque исправил свой ответ; оставив этот для потомков.