【问题标题】:PHP Composer: how to load and use a plugin located outside of vendor/?PHP Composer:如何加载和使用位于 vendor/ 之外的插件?
【发布时间】:2014-02-13 07:29:46
【问题描述】:

有没有办法让 Composer 运行位于 ./src/ 的安装程序插件?

relevant docs 不清楚应该如何完成,假设可以开始。

如果没有,文档似乎还建议可以在 COMPOSER_HOME 中安装插件,但基本上没有说明如何可以做到这一点 - 任何指针都会受到欢迎。

澄清一下:问题不在于自动加载类,而是让 composer 在运行 composer installcomposer update 时加载插件。

我的项目设置:

./app
…
./src
./src/Hello
./src/Hello/HelloPlugin.php
./vendor
…

插件文件:

<?php # ./src/Hello/Hello.php
namespace Hello;

use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Plugin\PluginInterface;

class HelloPlugin implements PluginInterface
{
    public function activate(Composer $composer, IOInterface $io);
    {
        echo "Hello World!".PHP_EOL;
    }
} # END class

项目composer.json文件的相关行:

{
    "name": "hello/world",
    "type": "project",
    "autoload": {
        "psr-0": {
            "Hello\\": "src/"
         }
    },
    "require": {
        "composer/installers": "~1.0",
        "composer-plugin-api": "~1.0"
    },
    "extra": {
        "class": ["Hello\\HelloPlugin"]
    }
}

【问题讨论】:

  • 你混淆了 psr-4 和 psr-0 :)
  • @Jack:已修复并已编辑问题,但问题不在于自动加载类……而是让 composer 在运行 composer installcomposer update 时加载插件。
  • 我的理解是你必须使用"type": "composer-plugin"为你的插件创建一个单独的包。
  • 是的,出售它确实有效,我最终采用了它。我仍然很想知道这是否可能,如果出现我不想(或不能)供应安装程序插件的情况,因为例如这不是图书馆。

标签: php symfony composer-php


【解决方案1】:

作曲家autoload 用于加载您在项目中require 的所有包的namespaces,而不是在composer installcomposer update 挂钩期间加载插件。

加载你自己的插件类的唯一方法是实现你自己的composer插件,一个composer-plugin类型的普通包,composer将使用它来加载你的HelloPlugin类。否则,您的插件类将不会在 composer install 挂钩期间加载。

我自己建了一个composer-plugin,在这里可以找到https://github.com/mnsami/composer-custom-directory-installer,供参考。

如果您有更多问题/或帮助,请随时提出。

【讨论】:

    【解决方案2】:
    "autoload": {
        "psr-0": {
            "Hello\\": "src/"
        }
    }
    

    https://getcomposer.org/doc/01-basic-usage.md#autoloading

    【讨论】:

    • 改变了,但是当我运行composer installcomposer update 时仍然没有加载插件我害怕。 :-(
    猜你喜欢
    • 2019-08-13
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2013-10-07
    • 2017-09-18
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    相关资源
    最近更新 更多