- Does your package require Symfony 5, but developers want to use it on Symfony 3?
- Do you want to scope your package dependencies with unique namespace, but don't know how?
- Do you want to skip learning of PhpScoper, PHAR packing, Box and GitHub Actions automated deploy?
You're in the right place!
composer require symplify/package-scoper symplify/monorepo-builder --dev
We also need symplify/monorepo-builder
, so we can work with relative paths of local packages.
php-scoper is a package that prefixes classes and functions, so they're unique and don't conflict with same-named class in a different version. You can read the documentation, or you can generate the config with sane defaults:
vendor/bin/package-scoper generate-php-scoper
It will create scoper.inc.php
right in the root of the package. That's the best location, because php-scoper works with path relative to its location.
Scoping PHP code with php-scoper is just the first step. The second is making a composer.json
with a different name than the original package. We got you covered! The following command will:
- update package name to
<original>-prefixed
- keep PHP version in
require
section, license and bin files - drop the rest
It must be run on the scoped package composer.json
, not the original one:
vendor/bin/package-scoper scope-composer-json <path-to-composer-json>
vendor/bin/package-scoper scope-composer-json packages-scoped/some-package/composer.json
The process without automatization would not be much helpful. That's why we have GitHub Action to automate it.
vendor/bin/package-scoper generate-workflow
Go to your .github/workflows
folder, update packages names manually and you're ready to go.
In the GitHub Workflow you only define package names. To make the whole process work, the <package-name>
must be used in:
- directory name
/package/<package-name>
- binary file name:
/package/<package-name>/bin/<package-name>
As the file is defined in the composer.json
:
{
"bin": [
"bin/<package-name>"
]
}