Posted at

composer requireがInstallation failedするけどどうしてもrequireしたいんだ


Composer requireしたらなんか怒られて失敗した

# composer require kalnoy/nestedset

Using version ^5.0 for kalnoy/nestedset
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

Problem 1
- illuminate/events v6.2.0 requires php ^7.2 -> your PHP version (7.1.29) does not satisfy that requirement.
- 省略
- illuminate/events 6.x-dev requires php ^7.2 -> your PHP version (7.1.29) does not satisfy that requirement.
- Conclusion: don't install kalnoy/nestedset v5.0.0
- Conclusion: remove laravel/framework v5.6.38
- Installation request for kalnoy/nestedset ^5.0 -> satisfiable by kalnoy/nestedset[v5.0.0, v5.x-dev].
- Conclusion: don't install laravel/framework v5.6.38
- kalnoy/nestedset v5.x-dev requires illuminate/events ~5.7.0|~5.8.0|^6.0 -> satisfiable by illuminate/events[5.7.17,省略v6.0.4, v6.1.0, v6.2.0].
- don't install illuminate/events 5.7.17|don't install laravel/framework v5.6.38
- 省略
- don't install illuminate/events v5.8.9|don't install laravel/framework v5.6.38
- Installation request for laravel/framework (locked at v5.6.38, required as 5.6.*) -> satisfiable by laravel/framework[v5.6.38].

Installation failed, reverting ./composer.json to its original content.


原因

今入れようとしたパッケージ(kalnoy/nestedset)とすでに入っているパッケージ(laravel/framework)がそれぞれ同じパッケージ(Illuminate/events)の違うバージョンに依存してしまっている。

本来なら古いバージョンのものをわざわざ入れるのは良くない(と思う。)が、今回はどうしても使いたいし、今後すでに入っている方(laravel/framework)のパッケージのバージョンをあげた際に解決する可能性もあるので強引に突破する。


解決法

このようにバージョン指定にアスタリスクをつけて、依存関係が解決されるバージョンが存在するのを祈る。

# composer require kalnoy/nestedset:4.*

kalnoy/nestedsetは現時点で5系が最新、4系の最新が4.3.5だったが、4.3.4で入った。

これでもしだめだったら:3.*:2.*と順にやっていくしかない。