I’m working on some new versions of PHP packages, and for that I’m working of a temporary branch. I wanted to update my local composer
packages, but ran into a package constraint.
$ php -d memory_limit=2G /usr/local/bin/composer require spatie/crawler dev-master#84f0b2c8c7d90dfb0689f043d3fa6c6333ebafef
./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
- spatie/mixed-content-scanner 3.1.0 requires spatie/crawler ^4.1.1 -> satisfiable by spatie/crawler[v4.x-dev].
- spatie/mixed-content-scanner 3.1.0 requires spatie/crawler ^4.1.1 -> satisfiable by spatie/crawler[v4.x-dev].
- spatie/mixed-content-scanner 3.1.0 requires spatie/crawler ^4.1.1 -> satisfiable by spatie/crawler[v4.x-dev].
- Can only install one of: spatie/crawler[v4.x-dev, dev-master].
- Installation request for spatie/crawler dev-master#84f0b2c8c7d90dfb0689f043d3fa6c6333ebafef -> satisfiable by spatie/crawler[dev-master].
- Installation request for spatie/mixed-content-scanner (locked at 3.1.0, required as ^3.0) -> satisfiable by spatie/mixed-content-scanner[3.1.0].
The goal was to install the package spatie/crawler
and pin it to commit 84f0b2c8c7d90dfb0689f043d3fa6c6333ebafef
, which lives in the v5
branch. But, other packages depend on that crawler and wouldn’t let me.
One workaround appears to be to “fake” the package version, by aliassing it.
You can do so in your composer.json
file:
{
"require": {
"spatie/crawler": "dev-master#84f0b2c8c7d90dfb0689f043d3fa6c6333ebafef as 4.2",
}
}
This fakes that specific commit to be interpreted as version 4.2
, which then passes the package requirements for other packages.
Note: there’s a --ignore-platform-reqs
flag, but that doesn’t allow you to force overwrite package requirements, just skip local PHP version or extension checks.