注意
Laravelのアップグレードガイドに沿って5.2から5.3へのバージョンアップを行った上で、別の環境にも適用しようと行ったところ、下記のようにcomposer updateが行えない現象が発生しました。
[vagrant@localhost laravel]$ composer update
> php artisan clear-compiled
[ErrorException]
Declaration of App\Providers\EventServiceProvider::boot() should be compatible with Illuminate\Foundation\Support\Providers\EventServiceProvider::boot(Illuminate\Contracts\Events\Dispatcher $events)
Script php artisan clear-compiled handling the pre-update-cmd event returned with error code 1
解決策としては下記のように、単純に--no-scripts
をつけてあげます。
composer update --no-scripts
以上。
経緯と原因
というだけでなく、その経緯、エラーの原因を記していきたいと思います。
そもそも、Laravelのアップデート手順として
- composer.jsonの更新
- composer update
- Laravel使用側のソースの書き換え
といった順番をとると思います。
書き換えたcomposer.json及び、他ソースをGitに反映しますよね。
その後、別環境にある同じプロジェクトに更新を反映させる手順は下記になると思います。
- Gitからソースを反映
- composer update
そのときに下記のようなことが起こります。
- Laravelを使用している側のソースが5.3のものに変わる
- Laravelのcoreが5.2のまま、5.3の使用方法で動作する
- composer update時、更新前にartisanが使用されるため、5.3用に書き直したソース(EventServiceProvider等)が5.2を参照しエラーを発生させる
- composer update失敗
流れとしては以上です。
なので対策としては最初にcomposer updateするときはartisanコマンドを起動しないように--no-scripts
をつけてあげればいいというわけです。