在PHP Composer中阻止程序包安装以使用程序包的分支

Pat*_*ick 3 php github behat mink composer-php

我正在与Behat和Composer合作开展一个项目.我不得不为Mink和Mink Selenium 2驱动程序创建一个fork和patch来处理弹出窗口.目前,管理我分配的回购的人仍在审核补丁.所以在同一时间我想使用我的fork版本.

我已经将我的存储库添加到作曲家并且它们被拉入.但是"behat/mink"包仍在安装,因为"behat/mink-extension"需要它.问题是它也可以使用它的叉子.所以我想让它只用我的而不是"behat/mink"包.

我可以这样做吗?我可以阻止包的必需包,而不是我的fork吗?

谢谢!

Dan*_*ack 8

是的,您需要做的就是将fork列为要使用的存储库,Composer将自动包含fork而不是原始包.从文档中

如果您正在为项目使用某个库,并且决定更改库中的某些内容,则需要您的项目使用修补版本.如果库在GitHub上(大多数时候都是这种情况),你可以简单地将它分叉并将更改推送到fork.之后,您更新项目的composer.json.您所要做的就是将您的fork添加为存储库并更新版本约束以指向您的自定义分支.

有人修补Monolog的例子.然后他们告诉Composer使用他们的存储库.

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/igorw/monolog"
        }
    ],
    "require": {
        "monolog/monolog": "dev-bugfix"
    }
}
Run Code Online (Sandbox Code Playgroud)

Composer将扫描所有可用版本,https://github.com/igorw/monolog并优先使用Packagist上提供的Monolog版本.

您还可以告诉Composer使用本地目录而不是HTTP地址.

"repositories": [
        {
            "type": "vcs",
            "url": "/documents/project/igorw/monolog"
        }
    ],
Run Code Online (Sandbox Code Playgroud)

这允许您开发库,在另一个项目中使用它并测试它,而无需在每次编辑和测试之间推送到Github.