我想在基于PHP的项目中使用adldap/adldap库。尽管此程序包的维护者尚未将此程序包添加到packagist,但他们包括了composer.json文件。因此,通常情况下,我只需添加以下我的composer.json,然后开始我的一天。

"repositories": [
{
    "type": "vcs",
    "url": "https://github.com/adldap/adLDAP"
}],

"require": {
    /* my other packages */
    "adldap/adldap":"4.04"
},


但是,这是行不通的,因为adldap/adldap已经被声明为by a different project in packagist,并且作曲家始终认为我需要packagist软件包。 (使事情变得更加复杂的是,packagist软件包是原始项目的分支,并且是不接受上游更改的分支)。

有没有办法告诉作曲家更喜欢配置的VCS信息库中的版本?还是我自己卡住了分叉的包装,更改了包装的名称,并将作曲家指向我的叉子? (或other forks之一维护此问题?)

最佳答案

该软件包的问题在于,“ v4.0.4”版本分支不包含composer.json文件。这意味着Composer无法选择它,并将跳过此分支。

您可能可以使用require内联别名来使其正常工作。
https://getcomposer.org/doc/articles/aliases.md#require-inline-alias

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/adldap/adLDAP"
        }
    ],
    "require": {
        "adldap/adldap": "dev-master as 4.0.4-dev"
    }
}


这将从GitHub中获取dev-masteradldap/adldap版本,并将其别名为4.0.4-dev

我不知道这是否是个好方法,也许太过骇人听闻,但是它会起作用。

将来:他们应该在其下一个发行版中包含composer.json文件,以便您摆脱内联别名并需要常规版本。



上面的示例使用相同的存储库,但使用不同的分支进行别名。
下一个示例使用具有参考分支(称为补丁)的其他存储库。此仓库/分支用于“代替”原始软件包。 “参考分支”意味着您从分叉的仓库中选择一个分支,并以“ dev-”作为前缀。
composer install之后,您应该获得adldap / adldap的分叉存储库,而不是来自packagist的存储库。

{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/repo-of-the-fork/adldap"
        }
    ],
    "require": {
        "adldap/adldap": "dev-patch"
    }
}


尽管这可以独立解决,但当其他软件包依赖于adldap的特定版本时,它可能无法解决。要解决此问题,您可以再次使用“内联别名”技巧:dev-patch as 4.0.4-dev

09-28 04:04