我想在基于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中的一个被认为可以解决这个问题吗?)
答案 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
。