我开发了一个便携式WebServer,我也创建了一个便携式控制台,以便使用Composer。
我有问题。我需要创建一个插件来向Composer添加其他行为。
我需要在使用Composer下载任何软件包时,编辑composer.json"脚本"该软件包,以便在便携式控制台上运行。
下载Laravel时,例如:
原作者composer.json:
{
"name": "laravel/laravel",
...
"scripts": {
"post-root-package-install": [
"php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
...
},
...
}
composer.json由插件编辑:
{
"name": "laravel/laravel",
...
"scripts": {
"post-root-package-install": [
"F:/portable_php_path/php.exe -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
...
},
...
}
(我的问题是创建了composer插件。使用PHP编辑composer.json没有问题。)
我阅读了在作曲家网站上创建插件的教程,但我很困惑。 (https://getcomposer.org/doc/articles/plugins.md)
如果有其他方法可以做到这一点,那也很有趣。我接受其他建议和想法。
感谢任何可以提供帮助的人。
[抱歉我的英语不好]
答案 0 :(得分:2)
我认为您可以使用插件实现PluginInterface
和EventSubscriberInterface
public static function getSubscribedEvents()
{
return [
'post-package-install' => 'onPostPackageInstall'
// hook post-package-install using onPostPackageInstall method
];
}
public function onPostPackageInstall(\Composer\Installer\PackageEvent $event)
{
$vendorDir = $event->getComposer()->getConfig()->get('vendor-dir') . '/';
/** @var InstallOperation $item */
foreach ($event->getOperations() as $item) {
$packageInstalled = $item->getPackage()->getName();
// do any thing with the package name like `laravel/laravel`
//You can now edit the composer.json file
echo $vendorDir . $packageInstalled . '/composer.json';
}
}