Composer で依存ライブラリのバージョンがあわないとき
問題
依存ライブラリを追加しようと思って composer.json を編集して
php composer.phar update
を実行したらこんな感じのエラーが出た
Your requirements could not be resolved to an installable set of packages. Problem 1 - Conclusion: remove yiisoft/yii dev-master - yiiext/migrate-command dev-master requires yiisoft/yii 1.1.* -> satisfiable by yiisoft/yii[1.1.14, 1.1.14-rc]. - yiiext/migrate-command dev-master requires yiisoft/yii 1.1.* -> satisfiable by yiisoft/yii[1.1.14, 1.1.14-rc]. - Can only install one of: yiisoft/yii[dev-master, 1.1.14]. - Can only install one of: yiisoft/yii[dev-master, 1.1.14-rc]. - Installation request for yiisoft/yii dev-master -> satisfiable by yiisoft/yii[dev-master]. - Installation request for yiiext/migrate-command dev-master -> satisfiable by yiiext/migrate-command[dev-master]
原因
yii-restful と yii-migrate-command ってのを両方使いたかったんだけど それぞれ composer.json に書いてある yii のバージョン指定が違うらしい。
- yii-restful: dev-master
- yii-migrate-command: 1.1.*
そんでどっちつかずになってインストールできなくなる模様。
解決
alias を使うと大丈夫だった
dev-master で master ブランチを指定していた yiisoft/yii を
{ "require": { "php": ">=5.5.0", "yiisoft/yii": "dev-master", "yiiext/migrate-command": "dev-master", "likai/yii-restful": "dev-master" } }
↓ as で 1.1.x ブランチとして扱うように変更する
{ "require": { "php": ">=5.5.0", "yiisoft/yii": "dev-master as 1.1.x-dev", "yiiext/migrate-command": "dev-master", "likai/yii-restful": "dev-master" } }
これで dev-master と 1.1.* を両方満せるようになって解決。
その他
dev-* OR *-dev って表現はブランチって意味らしい。 勉強になりました。