Ответ 1
Если плагин по существу является частью вашего пакета, вы не должны использовать его как таковой. Композитор предлагает альтернативы.
Как указал Йенс в комментарии к вашему вопросу, в composer.json
есть ключ "скриптов". Вы можете вызвать команды оболочки внутри, но также вызвать методы статического класса.
О плагиновском решении - композитор явно упоминает об этом на своем сайте:
Composer не делает предположений о состоянии ваших зависимостей перед установкой или обновлением. Поэтому вам не следует указывать сценарии, требующие зависимостей, управляемых с помощью Composer, в крючках событий pre-update-cmd или pre-install-cmd. Если вам нужно выполнить скрипты перед установкой или обновлением, убедитесь, что они автономны в корневом пакете.
(моя боковая заметка - это также примерно применимо к плагинам).
В любом случае - предоставить вам решение: отказаться от подхода "плагин". Вместо этого измените свой файл composer.json
, чтобы он выглядел следующим образом:
composer.json
{
"name": "foo/bar",
"type": "library",
"autoload": {
"psr-4": {
"Foo\\Bar\\": "src/"
}
},
"require": {
},
"scripts": {
"post-install-cmd": [
"Foo\\Bar\\Composer\\Plugin::postInstall"
],
"post-update-cmd": [
"Foo\\Bar\\Composer\\Plugin::postUpdate"
]
}
}
Кроме того, в папке src/Composer
создайте Plugin.php
:
ЦСИ/Композитор/plugin.php
<?php
namespace Foo\Bar\Composer;
use Foo\Bar\Test;
/**
* Composer scripts.
*/
class Plugin
{
public static function postInstall()
{
print_r("POST INSTALL\n");
print_r(Test::TEST_CONST);
print_r("\n");
}
public static function postUpdate()
{
print_r("POST UPDATE\n");
print_r(Test::TEST_CONST);
print_r("\n");
}
}
Как вы видите, он печатает константу из класса Test. Создайте его в src/
:
ЦСИ /test.php
<?php
namespace Foo\Bar;
/**
* Test class.
*/
class Test
{
const TEST_CONST = "HERE I AM";
}
Запустите это и проверьте, как он проигрывается.