How to resolve composer package incompatibilities.
Speed up the upgrade process even more with tips from the creator of Shift.
Set up your repositories to automatically release Pull Requests for new releases.
Shift does it's best to note any new version requirements when upgrading your application.
However, for older applications it's likely that your dependencies will become incompatible.
The process for resolving these dependency conflicts can be a bit tedious. Especially if you're not familiar with composer.
So you may end up in a situation where you've run your Shift and when you go to run composer install
you receive something like this...
The first step is to wade through the output and determine which package is incompatible.
Often composer
will complain more about the dependency it could not satisfy, and not the offending dependency.
If we scroll through we can normally find this at either the very bottom or somewhere in the middle.
Again, by process of elimination we can ignore statements about the Laravel or Illuminate packages as this is part of your upgrade.
Once you determine the package you can use composer
to require it again. Note that if it's a development dependency you'll want to add the --dev
option.
As soon as we see the version constraint appear, we can stop composer by pressing Ctrl + C.
This is a little trick to not only save time by preventing composer from trying to install all the dependencies, but also because when composer fails it reverts the updates to your composer.json
file.
If you happen to not to catch it in time, you can scroll up and copy the version constraint from the output and manually updated your composer.json
file.
Once we make this change we can attempt to run composer install
again. If another package conflicts, repeat this process until composer install
successfully install all of your dependencies.
If the composer require
continues to fail, it is possible that the package dependency is truly incompatible with your upgraded project. You can determine this reviewing the project requirements on Packagist or the project source. Often, if a package no longer supports a recent version it will suggest an alternative package or native functionality which may replace its need.
Sign in with any of the following services to connect Shift with your Laravel project.
Don't use one of these services?
Temporarily push your project to a free, private repository on one of these cloud-based services or upgrade your project locally with Shift for Docker.