别名
为什么需要别名?
Section titled “为什么需要别名?”使用版本控制系统(VCS)仓库时,你只会在名称类似版本的分支上获得可比较的版本,例如2.0或2.0.x。对于你的main分支,你会得到一个dev-main版本。对于你的bugfix分支,你会得到一个dev-bugfix版本。
如果您的main分支用于标记1.0开发线的发布版本,即1.0.1、1.0.2、1.0.3等,那么任何依赖它的包可能都需要1.0.*版本。
如果有人想要求最新的dev-main,他们会遇到一个问题:其他包可能要求1.0.*,因此要求该开发版本会导致冲突,因为dev-main与1.0.*约束不匹配。
输入别名。
dev-main分支是主版本控制系统仓库中的一个分支。通常,有人会想要最新的主开发版本。因此,Composer 允许你将dev-main分支别名为1.0.x-dev版本。这可以通过在composer.json中的extra下指定branch-alias字段来实现:
{ "extra": { "branch-alias": { "dev-main": "1.0.x-dev" } }}如果你为不可比较的版本(例如dev-develop)设置别名,dev-必须作为分支名称的前缀。你也可以为可比较的版本(即以数字开头,并以.x-dev结尾)设置别名,但只能作为更具体的版本。例如,1.x或1.x-dev分支可以从1.x-dev别名为1.2.x-dev,因为后者更具体。
别名必须是可比较的开发版本(例如,你不能将dev-main别名为dev-master),并且branch-alias必须存在于它所引用的分支上。要为dev-main设置别名,你需要在main分支上定义并提交它。
因此,现在任何人都可以要求使用1.0.*,它会顺利安装dev-main。
要使用分支别名,您必须拥有被别名化的包的仓库。如果您想为第三方包创建别名而不维护其分支,请使用下文所述的内联别名。
需要内联别名
Section titled “需要内联别名”分支别名非常适合为主要开发线创建别名。但要使用它们,你需要对源代码仓库有控制权,并且需要将更改提交到版本控制中。
当你想要尝试修复某个作为本地项目依赖项的库的漏洞时,这其实并不有趣。
因此,你可以在require和require-dev字段中为包设置别名。假设你在monolog/monolog包中发现了一个漏洞。你在GitHub上克隆了Monolog,并在名为bugfix的分支中修复了这个问题。现在,你希望在本地项目中安装那个版本的monolog。
您正在使用symfony/monolog-bundle,它需要monolog/monolog的版本为1.*。因此,您的dev-bugfix需要满足该约束条件。
将此添加到项目的根目录 composer.json 中:
{ "repositories": [ { "type": "vcs", "url": "https://github.com/you/monolog" } ], "require": { "symfony/monolog-bundle": "2.0", "monolog/monolog": "dev-bugfix as 1.0.x-dev" }}或者让Composer通过以下命令为你添加:
php composer.phar require "monolog/monolog:dev-bugfix as 1.0.x-dev"这将从你的GitHub获取dev-bugfix版本的monolog/monolog</b1,并将其别名为1.0.x-dev。
**注意:**内联别名是仅管理员可用的功能。如果需要带有内联别名的包,别名(
as右侧的部分)将用作版本约束。as左侧的部分会被舍弃。因此,如果A需要B,而B需要monolog/monolog版本为dev-bugfix as 1.0.x-dev,那么安装A会使B需要1.0.x-dev,这可能作为分支别名存在,或者是实际的1.0分支。如果不存在,则必须在A的composer.json中再次进行内联别名设置。**注意:**应避免内联别名,尤其是对于已发布的包/库。如果您发现了错误,请尝试将您的修复合并到上游。这有助于避免给您的包的用户带来问题。