dex / composer-plug-and-play
Plug and play packages for Composer
Installs: 26 838
Dependents: 0
Suggesters: 0
Security: 0
Stars: 5
Watchers: 3
Forks: 2
Open Issues: 0
Type:composer-plugin
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-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.
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.