How to fix error of composer post-install-cmd script?
Solution 1
Just in case someone stumbled again to this problem. Here is a spoon feed sample. :)
In a given scenario like this
We have to set on our composer.json to the ff. settings
"autoload": {
"psr-0": {
"ComposerScript\\Installer" : ""
}
},
"scripts": {
"post-package-update": [
"ComposerScript\\Installer::postPackageUpdate"
]
}
Then the content of Installer.php is
namespace ComposerScript;
use Composer\Script\Event;
class Installer
{
public static function postUpdate(Event $event)
{
$composer = $event->getComposer();
// do stuff
}
public static function postPackageUpdate(Event $event)
{
$packageName = $event->getOperation()
->getPackage()
->getName();
echo "$packageName\n";
// do stuff
}
public static function warmCache(Event $event)
{
// make cache toasty
}
}
Then executing php composer.phar update
will work without warning.
Solution 2
Kongthap, I ran into the same problem and this is how I fixed it:
"require": {...},
"autoload": {
"psr-0": {
"Dphp": "src/"
}
},
"scripts": {...}
Dphp is the root namespace of my lib.
Hope it helps.
Solution 3
The post-package-install
value is relative to the location of the composer.json file. Do not use absolute location here.
Also, Composer's install scripts expect PHP, not sh!
Related videos on Youtube
Artisan
Updated on September 15, 2022Comments
-
Artisan over 1 year
I would like to use composer script to do some post installation such as copying files from bootstrap vendor folder to my web application public folder. I have a baby experience with PHP world and web application development.
I'm trying to learn doing this by following this tutorial
This is my directory structure*
This is my composer.json
{ "name": "Composer Script", "description": "An example to demonstrate the use of Composer scripts", "version": "1.0.0", "require": { "twitter/bootstrap": ">=3.0" }, "scripts": { "post-install-cmd": [ "ComposerScript\\Installer::postInstall" ], "post-package-install": [ "/var/www/test/composer-script/install.sh" ] } }
This is ComposerScript\Installer.php
class Installer { public static function postInstall(Event $event) { $composer = $event->getComposer(); // do stuff } public static function postPackageInstall(Event $event) { $installedPackage = $event->getOperation()->getPackage(); // do stuff } public static function warmCache(Event $event) { // make cache toasty } }
After execute composer install I got this error
install.sh is empty at this moment
How to fix this error, and especially what is autoload?, I don't event know what keywords to search for please suggest me some reading.
-
myol almost 9 yearsThanks, this worked. However, I would love to know how to modify this if the script I am calling is in a second folder within ComposerScript