Adds to Composer, PHP's dependency manager, the ability to plug and play packages without necessarily installing
a new dependency on composer.json
.
Composer Plug and Play requires Composer
2.3.0
or newer.
composer require dex/composer-plug-and-play
You can install Composer Plug and Play globally to use its abilities in all your local projects.
composer global require dex/composer-plug-and-play
Initialize a plug and play structure:
composer plug-and-play:init
Create or clone a Composer package into packages/<vendor>/<package>
folder and run:
composer plug-and-play
You can add some additional configuration in packages/composer.json
to add more data in the final resolution of the
composer.json
file.
All commands use the plug-and-play.json
and plug-and-play.lock
files as source to project dependencies instead of
composer.json
and composer.lock
original files.
You can use composer pp
and composer pp:*
as alias for all commands.
plug-and-play
: installs plug and play dependencies together project dependencies.plug-and-play:add
: require a package intopackages/composer.json
.plug-and-play:dump
: same thatcomposer dump-autoload
, but usingplug-and-play
files.plug-and-play:init
: initialize plug and play plugin.plug-and-play:install
: same thatcomposer install
, but usingplug-and-play
files.plug-and-play:reset
: removeplug-and-play
files.plug-and-play:run
: same thatcomposer run-script
, but usingplug-and-play
files.plug-and-play:update
: same thatcomposer update
, but usingplug-and-play
files.
Composer Plug and Play plugin needs a packages
folder in
the project root directory where the plug and play structure will live.
The plug-and-play.json
and plug-and-play.lock
files will contain the real project dependencies and plug and play
dependencies.
Your project directory will look like this:
|- packages
| |- <vendor-name>
| | |- <plug-and-play-package>
| | |- composer.json
| | |- composer.lock
| |- composer.json
| |- plug-and-play.json
| |- plug-and-play.lock
|
|- vendor
| |- <vendor-name>
| |- <require-package>
| |- composer.json
| |- composer.lock
|
|- composer.json
|- composer.lock
Sometimes you may need to ignore a package that is under development, for that adds in packages/composer.json
something like this and run composer plug-and-play
.
{
"extra": {
"composer-plug-and-play": {
"ignore": [
"dex/fake"
]
}
}
}
When developing some package or library you may need to require its dev dependencies, for that adds in
packages/composer.json
something like this and run composer plug-and-play
that the require-dev
dependencies will
be installed.
{
"extra": {
"composer-plug-and-play": {
"require-dev": [
"dex/fake"
]
}
}
}
You may have some problems with symlinks and recursion when developing packages inside another application or package,
for that, you can use experimental:autoload
strategy.
This strategy will create a simple copy of your composer.json
in packages/vendor
directory to do a symlink from your
original vendor
directory.
To activate it, you should change your packages/composer.json
.
{
"extra": {
"composer-plug-and-play": {
"autoload-dev": ["dex/fake"],
"require-dev": ["dex/fake"],
"strategy": "experimental:autoload"
}
}
}
You must add to autoload-dev
the packages that you want to map its autoload and add to require-dev
the packages
that you want to require its dev dependencies.
Composer Plug and Play is licensed under the MIT license. See the license file for more details.