別名#
為什麼需要別名?#
當您使用VCS儲存庫時,只會獲得類似版本,例如2.0
或2.0.x
。對於您的master
分支,將獲得dev-master
版本。對於您的bugfix
分支,將獲得dev-bugfix
版本。
如果您的master
分支用於標記1.0
開發線的版本,即1.0.1
、1.0.2
、1.0.3
等,任何依賴它的套件可能需要版本1.0.*
。
如果有人想要求最新的dev-master
版本,他們會遇到問題:其他套件可能需要1.0.*
,因此需要該開發版本將導致衝突,因為dev-master
不符合1.0.*
約束。
輸入別名。
分支別名#
dev-master
分支是您的主要VCS儲存庫中的分支。最常見的情況是有人需要最新的master開發版本。因此,Composer允許您將您的dev-master
分支別名設為1.0.x-dev
版本。通過在composer.json
的extra
中指定branch-alias
欄位來完成。
{
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
}
}
如果您將非可比較版本(例如dev-develop)指定為別名,則dev-
必須在前置分支名稱。您也可以將可比較版本指定為別名(即以數字開頭,以.x-dev
結尾),但只能作為更具體的版本。例如,1.x-dev可以指定為別名1.2.x-dev。
別名必須是可比較的開發版本,並且必須在它引用的分支上存在branch-alias
。對於dev-master
,您需要將其提交到master
分支。
因此,現在任何人都可以要求1.0.*
,並且它將很樂意安裝dev-master
。
為了使用分支別名,您必須擁有別名套件的儲存庫所有權。如果您想將第三方套件指定為別名,而無需維護它的分支,請使用下文所述的內聯別名。
要求內聯別名#
分支別名非常適合用於建立主要開發線的別名。但要使用它們,您需要控制原始存放庫,而且需要提交變更至版本控制。
如果您要嘗試修正您當地專案中依賴函式庫的某個錯誤,這不是一件有趣的事。
出於這項原因,您可以對 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 中取得 monolog/monolog
的 dev-bugfix
版本,並將它命名為 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
中再次內嵌別名。請注意:內嵌別名應避免使用,特別是對於公開的套件/函式庫。如果您發現錯誤,請嘗試將您的修正合併至上游。這有助於避免您套件使用者的問題。
找到錯別字嗎?這份文件有任何問題嗎?fork 並編輯它!