分かったこと
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を扱う場合
- 自作ライブラリ(非公開)をcomposer対応した
- このライブラリは 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 方法にもその旨但し書きせよ
というお話でした。以上。