Composerで必要なrepositoriesは全部書け、の話

分かったこと

composer で install する package が pear など外部の repository に依存している場合、その依存 repository は composer install の実行対象の composer.json に書かれていなければいけない。

+----------------+    +-------------------+    +---------------+
|(1)composer.json| -> |(2)composer package| -> |(3)pear package|
+----------------+    +-------------------+    +---------------+

上の図のようになっている場合、(2) の composer.json だけでなく、(1) の composer.json にも repository の追加が必要。

composer 1.0-dev (d79427f1a7b15e8f4d46ce8124a4d0c58ba1479c) で試した。

composerでpear packageを扱う場合

  1. 自作ライブラリ(非公開)をcomposer対応した
  2. このライブラリは pear に依存しているので以下のような記述を追加した
"repositories": [
   {
     "type": "pear",
     "url":  "http://pear.php.net"
   }
]

ここまでは前回も実験してるし、探せば出てくる情報。

cf. 今さらComposer - あーありがち(2014-07-02)

composerはrepositoriesを再帰的に解決しない

みたい。

上の図で言うと (2) で repositories を追加しているので (1) には書かなくていいんじゃないかと思ったんだけど、そんなことはなくて、(1) に repositories を追加しないと、

requires pear-pear.php.net/http * -> no matching package found.

みたいなエラーが出る。

頑張って package の指定のミスを探したけど、何のことはない、単に repository を追加していなかったからであった。

まとめ

  • pear など repositories の追加が必要な composer package を利用する場合は install の実行対象となっている composer.json にも repositories の追記が必要
  • 自分でそのような package を作る場合は README など install 方法にもその旨但し書きせよ

というお話でした。以上。

More