dex / composer-plug-and-play
Plug and play packages for Composer
Installs: 34 536
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 2
Forks: 2
Open Issues: 0
Type:composer-plugin
pkg:composer/dex/composer-plug-and-play
Requires
- php: ^8.1
- composer-plugin-api: ^2.3
- ext-json: *
Requires (Dev)
- composer/composer: ^2.3.0
- laravel/pint: ^1.7
- pestphp/pest: ^2.34
README
Adds to Composer, PHP's dependency manager, the ability to plug and play packages without necessarily installing
a new dependency on composer.json.
Installation
Composer Plug and Play requires Composer
2.3.0 or newer.
composer require dex/composer-plug-and-play
Global installation
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
Usage
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
Additional configuration
You can add some additional configuration in packages/composer.json to add more data in the final resolution of the
composer.json file.
Commands
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-playfiles.plug-and-play:init: initialize plug and play plugin.plug-and-play:install: same thatcomposer install, but usingplug-and-playfiles.plug-and-play:reset: removeplug-and-playfiles.plug-and-play:run: same thatcomposer run-script, but usingplug-and-playfiles.plug-and-play:update: same thatcomposer update, but usingplug-and-playfiles.
Directories and 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
Ignore plugged packages
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"
]
}
}
}
Require dev dependencies from plugged packages
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"
]
}
}
}
Autoload (strategy)
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.
License
Composer Plug and Play is licensed under the MIT license. See the license file for more details.