我已经创建了一个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这样的命令,而不需要用户手动执行?

推荐答案

好的,我现在已经解决了这个问题-,你知道如何运行composer global require laravel/installer,然后立即输入laravel,你会看到一些来自命令的帮助文本?这是我想要通过我的套餐实现的相同级别的便利,所以我决定go 哪里更好地查看它是如何完成的?

我认为这是错误的;我不希望在我的全局安装的包中有一个vendor目录,我也不应该期望在我的包中有像composer install这样的命令.

我能够从上面移走这两个街区.在我的phpenv脚本中,我正在从我的包中查找自动加载器,我还添加了一个额外的判断,以便这将使用C:/Users/Danny/AppData/Roaming/Composer/vendor/autoload.php(如果存在的话)的自动加载器-this removes the need to run 102(向下一步):

if (file_exists(dirname(__DIR__, 3) . '/autoload.php')) {
    require dirname(__DIR__, 3) . '/autoload.php';
} else {
    require dirname(__DIR__, 1) . '/vendor/autoload.php';
}

假设您已经将您的Composer bin目录添加到您的路径中(类似于C:/Users/Danny/AppData/Roaming/Composer/bin),通过确保执行我的命令的脚本被映射到上面的bin目录,我能够特别地消除将路径添加到这个包的需要.我将phpenv脚本移到包中的bin目录,然后将以下代码添加到composer.json-this removes the need to add the path to the script directory to my environment variables path中:

"bin": [
    "bin/phpenv"
],

Php相关问答推荐

仅显示特定WooCommerce产品类别的额外产品字段

未找到laravel cascadeOnEdit

如何使用PHP停止foreach循环中的重复项?

在PHP中读取JSON

如何在Livewire 3 Form类中做依赖注入?

在WooCommerce管理中为订单项目添加自定义字段价格值

WooCommerce中特定付款方式的变更订单预留库存时间

如何解决 Laravel 外键错误?

使用 php Carbon 获取两个日期之间的随机日期和时间

Woocommerce API - 图像问题

用于更新 WooCommerce 管理产品列表中库存数量的自定义输入字段

使用 phpseclib 验证 RSA-PSS

无法使用 slim 的父级容器

将 WooCommerce 0 销售价格替换为自定义文本,并保留常规价格删除线

如何获得没有运输等级的产品

根据购买产品的自定义字段替换WooCommerce添加到购物车按钮

将Shopware 6后端中定义的值导入MultiFilter

仅允许减少 WooCommerce 中已完成订单的库存数量

如何用 php ML 解决这个问题?

hasOne/belongsToMany 或多对多