Объявление зависимостей от конкретных версий модулей 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 исправил свой ответ; оставив этот для потомков.

Другие вопросы по тегам