Как исправить ошибку composer post-install-cmd script?

Я хотел бы использовать сценарий composer для выполнения некоторой установки post, такой как копирование файлов из папки bootstrap vendor в общую папку моего веб-приложения. У меня есть опыт ребенка с PHP world и разработкой веб-приложений.

Я пытаюсь узнать делать это, следуя в этом уроке

это моя структура каталогов* enter image description here

это мой композитор.в 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": [
            "ComposerScriptInstaller::postInstall"
        ],
        "post-package-install": [
            "/var/www/test/composer-script/install.sh"
        ]
    }
}

это ComposerScriptInstaller.в 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
        }
    }

после выполнения composer install я получил эту ошибку enter image description here

install.sh пусто в этот момент

Как исправить эту ошибку, и особенно что такое autoload?, Я не знаю, какие ключевые слова для поиска, пожалуйста, предложите мне прочитать.

4 ответов


на всякий случай, если кто-то снова наткнулся на эту проблему. Вот образец кормления ложкой. :)

в данном сценарии, как это

enter image description here

мы должны установить на нашем композитора.json в ff. настройки

"autoload": {
    "psr-0": {
        "ComposerScript\Installer" : ""
    }
},

"scripts": {
    "post-package-update": [
        "ComposerScript\Installer::postPackageUpdate"
    ]
}

затем содержимое установщика.php-это

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
    }
}
выполнения php composer.phar update будут работать без предупреждения.

на post-package-install значение относительно местоположения композитора.файл json. Не используйте абсолютное местоположение здесь.

кроме того, скрипты установки Composer ожидают PHP, а не sh!


Kongthap, я столкнулся с той же проблемой, и вот как я ее исправил:

"require": {...},
"autoload": {
    "psr-0": {
        "Dphp": "src/"
    }
},
"scripts": {...}

Dphp-корневое пространство имен моего lib.

надеюсь, что это помогает.


Иногда проблема может быть в том, что глобальные пакеты устарели, вы можете исправить это, выполнив команду composer global update перед composer install