5

私は職場のプロジェクトで Dist::Zilla を使用しており、[Prereqs / Requires]セクションですべての依存関係を宣言しました。ここまでは問題ありません。

現在、依存関係の 1 つの最新バージョンが下位互換性を壊していることがわかったので、依存するバージョンの範囲を制限したいと考えています。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 を使用して前提条件を実行します。そのドキュメントでは、バージョン範囲の章で構文について説明しています。

一部のフィールド (prereq、optional_features) は、前提条件として必要な可能性のある他のモジュールの特定のバージョンを示します。このセクションでは、この情報を提供するために使用されるバージョン範囲の種類について詳しく説明します。

バージョン範囲の最も単純な形式は、バージョン番号そのものです (例: 2.4)。これは、少なくともバージョン 2.4 が存在する必要があることを意味します。前提条件でバージョンがまったく定義されていない場合でも、前提条件のどのバージョンでも問題ないことを示すには、バージョン 0 を使用します。

または、バージョン範囲では、演算子 < (より小さい)、<= (以下)、> (より大きい)、>= (以上)、== (等しい)、および != (等しくない) を使用できます。同等)。たとえば、仕様 < 2.0 は、前提条件の 2.0 未満のバージョンが適切であることを意味します。

より複雑な状況では、コンマを使用してバージョン指定を AND で結合することができます。>= 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 に答える