Once in a while, I get lucky being asked to revive some legacy client project, that needs massive upgrades.

Normally, the upgrade goes fine, meeting all required upgrades, making sure all the functionality is in place. But this time, the project was so outdated that the packages listed in composer dependencies didn’t just get into the archive. They were moved to a different repository, then closed down, and then mirrored by another developer.

Thankfully, this can be quickly resolved by replace operator of composer. I’ll leave it here for some future reference:

   "require": {
      "author/replacement_package": "version"
   "replace": {
      "author/outdated_package": "version"