I have composer project without code but with list of dependencies. I want to run composer install
for download all dependent packages and run some bash commands into each one after it.
My composer.json:
{
"name": "testmain/testmain",
"description": "testmain",
"minimum-stability": "dev",
"repositories": [{
"type": "package",
"package": {
"name": "testsub/testsub1",
"description": "testsub/testsub1",
"version": "master",
"source": {
"url": "https://github.com/testsub/testsub1",
"type": "git",
"reference": "master"
},
"scripts": {
"post-install-cmd": [
"make",
"make install"
]
}
}
},
{
"type": "package",
"package": {
"name": "testsub/testsub2",
"description": "testsub/testsub2",
"version": "master",
"source": {
"url": "https://github.com/testsub/testsub2",
"type": "git",
"reference": "master"
},
"scripts": {
"post-install-cmd": [
"make",
"make install"
]
}
}
}
],
"require": {
"testsub/testsub1": "master",
"testsub/testsub2": "master"
}
}
The problem is in running scripts
sequence of nested packages, all scripts are ignored by composer.
Thanks!
Unfortunately, it is not possible to execute any non-ROOT scripts (in meaning non-root composer.json
), as mentioned in documentation:
Note: Only scripts defined in the root package's composer.json are executed. If a dependency of the root package specifies its own scripts, Composer does not execute those additional scripts.
As Tomas stated, it is not possible to automatically call non-ROOT scripts. But you can enable the user to call them manually. This is not applicable in all situations, but good in others.
If you have the following in vendor/johndoe/mypackage/composer.json
:
"scripts": {
"nameOfScript": "\\johndoe\\mypackage\\Scripts::invoke"
}
In the composer.json
of your root directory put the following:
"scripts": {
"myFancyScript": [
"@putenv COMPOSER=vendor/johndoe/mypackage/composer.json",
"@composer nameOfScript"
]
}
Then the user can call composer myFancyScript
from your root directory and the static function invoke()
in the package johndoe/mypackage
is executed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With