This project provides a way to have scripts be executed on packages when they are being installed, updated and uninstalled.
Currently only scripts defined in the root composer.json file are being executed. This is a workaround to Composer's Issue 1993.
For security reasons, Composer\Script\PackageEvent will only be forwarded to the packages for which these events are being raised.
In my case, I have Drupal modules and themes hosted in a git repo. Once installed/updated via composer I want to:
- Run compass to generate .css files
- Remove some files (.gitignore, .sass directory, ...)
Each module or theme being responsible to perform its own install/update/uninstall tasks.
Install this project via packagist :
composer require werbfred/composer-package-updater
Open the root composer.json file to update it with configuration below:
Add "ComposerPackageUpdater\\composer\\": "vendor/werbfred/composer-package-updater/src/composer"
to psr-4
in autoload
section.
"autoload": {
"psr-4": {
"ComposerPackageUpdater\\composer\\": "vendor/werbfred/composer-package-updater/src/composer"
}
}
This will tell Composer where files of a given namespace are located. In our case Composer will be able to load our PackageUpdater class.
Note: More information on autoload
section can be found here.
Add below entries to the scripts
section.
"scripts": {
"pre-package-install": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
"post-package-install": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
"pre-package-update": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
"post-package-update": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
"pre-package-uninstall": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
"post-package-uninstall": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent"
}
The above will ensure that below PackageEvents can be forwarded :
- pre-package-install
- post-package-install
- pre-package-update
- post-package-update
- pre-package-uninstall
- post-package-uninstall
Note: More information on scripts
section can be found here and there.
Configuration must be added under dependency-scripts
in extra
section.
Parameter | type | Default | Description |
---|---|---|---|
run | bool | false | If true package scripts will be called. Any other value will be considered as false. |
trust | array | [] | List of packages for which you want the Composer\Script\PackageEvent be dispatched. |
"extra": {
"dependency-scripts": {
"run": true,
"trust": [ "dummy"
, "foobar" ]
}
}
Note: More information on extra
section can be found here.
You can now fill your scripts
section with your own ones.
Be careful: Pathes in your autoloads
section must be relative to your package's location.
- Composer.json schema : https://getcomposer.org/doc/04-schema.md
- More on scripts : https://getcomposer.org/doc/articles/scripts.md