別名#

為什麼需要別名?#

當您使用VCS儲存庫時,只會獲得類似版本,例如2.02.0.x。對於您的master分支,將獲得dev-master版本。對於您的bugfix分支,將獲得dev-bugfix版本。

如果您的master分支用於標記1.0開發線的版本,即1.0.11.0.21.0.3等,任何依賴它的套件可能需要版本1.0.*

如果有人想要求最新的dev-master版本,他們會遇到問題:其他套件可能需要1.0.*,因此需要該開發版本將導致衝突,因為dev-master不符合1.0.*約束。

輸入別名。

分支別名#

dev-master分支是您的主要VCS儲存庫中的分支。最常見的情況是有人需要最新的master開發版本。因此,Composer允許您將您的dev-master分支別名設為1.0.x-dev版本。通過在composer.jsonextra中指定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

為了使用分支別名,您必須擁有別名套件的儲存庫所有權。如果您想將第三方套件指定為別名,而無需維護它的分支,請使用下文所述的內聯別名。

要求內聯別名#

分支別名非常適合用於建立主要開發線的別名。但要使用它們,您需要控制原始存放庫,而且需要提交變更至版本控制。

如果您要嘗試修正您當地專案中依賴函式庫的某個錯誤,這不是一件有趣的事。

出於這項原因,您可以對 requirerequire-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/monologdev-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 並編輯它!