我已经创建了一个Composer包,它被设计为在全局安装,它基本上是一个为我经常用于本地开发的项目旋转Docker环境的包.我想分享我的包,但想让它更用户友好.
目前在安装包(composer global require me/my-package-name
)时,用户需要采取一些额外的步骤:
-
cd
放到安装位置并运行composer install
(在他们供应商目录中我的包的根目录中) - 在MacOS上,用户还需要运行
cd docker && chmod +x phpenv
- 将超过
docker
个文件夹添加到其路径中
我试图减轻这方面的负担,所以我try 添加一个软件包安装后命令-composer.json
:
"scripts": {
"post-package-install": [
"DannyXCII\\Environment\\Install\\Installer::postPackageInstall"
]
},
public static function postPackageInstall(): void
{
$path = dirname(__DIR__, 3);
exec("cd $path && composer install && composer update && composer dump-autoload && cd docker && chmod +x phpenv");
}
在全局安装此程序时try 此脚本但失败后,我现在意识到此脚本won't get called when this package is installed只有在需要软件包并且在此软件包中运行composer install
时才能运行,如下所示:
注意:只执行在根程序包的poser.json中定义的脚本.如果根程序包的依赖项指定了自己的脚本,则Composer不会执行这些附加脚本.
所以,我相信在这种情况下,解决方案是将此脚本添加到root project中-因此我需要更新此脚本并添加到C:\Users\Danny\AppData\Roaming\Composer
中的composer.json
文件(?),其他任何想要使用此脚本的人也是如此-所以这不能解决我的可用性问题.
我已经搜索并试图解决这个问题有一段时间了,但我发现这个话题很难搜索.
Essentially, my question is:在全局需要之后,我如何在我的包中运行像composer install
这样的命令,而不需要用户手动执行?