Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to fix error of composer post-install-cmd script?

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* enter image description here

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 enter image description here

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.

like image 470
Artisan Avatar asked Oct 02 '13 09:10

Artisan


2 Answers

Just in case someone stumbled again to this problem. Here is a spoon feed sample. :)

In a given scenario like this

enter image description here

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.

like image 73
notmii Avatar answered Sep 16 '22 13:09

notmii


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!

like image 22
Juan Treminio Avatar answered Sep 20 '22 13:09

Juan Treminio