11

我想使用 composer 脚本进行一些后期安装,例如将文件从引导供应商文件夹复制到我的 Web 应用程序公共文件夹。我对 PHP 世界和 Web 应用程序开发有初步的经验。

我正在尝试按照本教程学习这样做

这是我的目录结构* 在此处输入图像描述

这是我的 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"
        ]
    }
}

这是 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
        }
    }

执行composer install后出现此错误 在此处输入图像描述

install.sh 此刻为空

如何解决此错误,尤其是什么是自动加载?,我不知道要搜索哪些关键字,请建议我阅读。

4

4 回答 4

6

以防万一有人再次遇到这个问题。这是一个勺子饲料样本。:)

在这样的给定场景中

在此处输入图像描述

我们必须将我们的 composer.json 设置为 ff。设置

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

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

那么Installer.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将在没有警告的情况下工作。

于 2013-11-30T15:53:03.217 回答
1

post-package-install值相对于 composer.json 文件的位置。不要在这里使用绝对位置。

此外,Composer 的安装脚本需要 PHP,而不是 sh!

于 2013-10-02T18:02:25.167 回答
1

Kongthap,我遇到了同样的问题,这就是我解决它的方法:

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

Dphp 是我的库的根命名空间。

希望能帮助到你。

于 2013-11-05T08:28:15.317 回答
0

有时问题可能是全局包已过时,您可以通过composer global update在运行前运行命令来修复它composer install

于 2017-10-05T12:39:57.427 回答