Composer:优先于Packagist上的VCS存储库

时间:2015-04-01 17:18:13

标签: php github composer-php packagist

我想在基于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包是原始项目的一个分支,而且是一个不接受上游更改的分支)。

有没有办法让作曲家更喜欢配置的VCS存储库中的版本?或者我是不是自己动了包裹,改名,然后把作曲家指向我的叉子? (或者other forks中的一个被认为可以解决这个问题吗?)

1 个答案:

答案 0 :(得分:5)

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

您可以使用 require inline alias 来实现此功能。 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-master版本的adldap/adldap,并将其别名为4.0.4-dev

我不知道这是不是一个好方法,也许太过于hackish,但它会起作用。

将来:他们应该在下一个版本中包含composer.json文件,以便您可以删除内联别名并要求正常版本。


上面的示例使用相同的repo,但使用不同的分支进行别名。 下一个示例使用不同的repo,带有引用分支(称为patch)。此repo / branch用于“替代”原始包。 “参考分支”表示您从分叉仓库中选择一个分支,并在其前面添加“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