【问题标题】:How to fix error of composer post-install-cmd script?如何修复 composer post-install-cmd 脚本的错误?
【发布时间】:2013-10-08 15:15:50
【问题描述】:

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

我正在尝试学习通过关注this tutorial

这是我的目录结构*

这是我的 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 为空

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

【问题讨论】:

    标签: php composer-php autoloader


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

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

        在这样的给定场景中

        我们必须将我们的 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 将在没有警告的情况下工作。

        【讨论】:

        • 谢谢,这行得通。但是,如果我正在调用的脚本位于 ComposerScript 中的第二个文件夹中,我很想知道如何修改它
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-08-09
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          • 2017-09-28
          • 2018-10-05
          • 2020-04-20
          相关资源
          最近更新 更多