函式庫#

本章節將說明如何透過 Composer 使您的函式庫可安裝。

每個專案都是套件#

只要在目錄中有 composer.json,該目錄就是套件。當您為專案新增 require 時,您就是在製作一個依賴於其他套件的套件。專案與函式庫之間的唯一差異是,專案沒有名稱。

為了使該套件可安裝,您需要為其命名。您可以透過在 composer.json 中新增 name 屬性來執行此操作

{
    "name": "acme/hello-world",
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

在此情況下,專案名稱為 acme/hello-world,其中 acme 是供應商名稱。必須提供供應商名稱。

注意:如果您不知道該使用什麼做為供應商名稱,通常您的 GitHub 使用者名稱會是不錯的選擇。套件名稱必須是小寫,慣例是用連字號來分隔字詞。

函式庫版本控制#

在絕大多數情況下,您會使用版本控制系統(例如 git、svn、hg 或 fossil)來維護您的函式庫。在這些情況中,Composer 會根據 VCS 從版本中推算,您不應在您的 composer.json 檔案中指定版本。(請參閱 版本文章,以瞭解 Composer 如何使用 VCS 分支和標籤來解析版本約束。)

如果您手動維護套件(即未使用 VCS),則需要透過在您的 composer.json 檔案中新增 version 值來明確指定版本

{
    "version": "1.0.0"
}

注意:當您為 VCS 加入硬編碼的版本時,版本會與標籤名稱產生衝突。Composer 將無法確定版本號碼。

VCS 版本控制#

Composer 使用 VCS 的分支和標籤功能來解析您在 require 欄位中指定為特定檔案集的版本限制。在判斷有效可用的版本時,Composer 會查看所有您的標籤和分支,並將其名稱轉換為內部選項清單,然後再根據您提供的版本限制進行比對。

有關 Composer 如何處理標籤和分支,以及如何解析套件版本限制的詳細資訊,請閱讀 版本 文章。

鎖定檔#

如果您願意,可以提交 composer.lock 檔案來為您的程式庫。這可以幫助您的團隊持續測試相同的依賴性版本。但是,此鎖定檔將不會對任何依賴於它的其他專案產生任何影響。它只會對主專案產生影響。

如果您不想要提交鎖定檔,而且您正在使用 git,請將它加入 .gitignore

發布到 VCS#

一旦您有一個包含 composer.json 檔的 VCS 存放庫 (版本控制系統,例如 git),您的程式庫已經可以透過 composer 安裝。在此範例中,我們將在 GitHub 上以 github.com/使用者名稱/hello-world 發布 acme/hello-world 程式庫。

現在,要測試安裝 acme/hello-world 套件,我們在本地建立一個新專案。我們將稱它為 acme/blog。此部落格將依賴 acme/hello-worldacme/hello-world 又會依賴 monolog/monolog。我們可以透過在某個地方建立一個新的 blog 目錄,其中包含一個 composer.json 來完成。

{
    "name": "acme/blog",
    "require": {
        "acme/hello-world": "dev-master"
    }
}

本例中不需要名稱,因為我們不想將部落格作為程式庫來發布。在此加入名稱是為了釐清正在描述哪一個 composer.json

現在,我們需要告訴部落格應用程式去哪找 hello-world 依賴性。我們透過加入一個套件存放庫規格到部落格的 composer.json 來做到這一點:

{
    "name": "acme/blog",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/username/hello-world"
        }
    ],
    "require": {
        "acme/hello-world": "dev-master"
    }
}

有關套件存放庫如何運作以及有哪些其他類型可用的詳細資訊,請參閱 存放庫

就這樣。您現在可以透過執行 Composer 的 install 指令來安裝依賴性!

摘要:任何包含 composer.json 的 git/svn/hg/fossil 存放庫都可以透過指定套件存放庫並在 require 欄位中宣告依賴性來加入到您的專案。

發布到 packagist#

好吧,所以現在您可以發布套件了。但是每次都要指定 VCS 存放庫會很麻煩。您不想強迫所有使用者這麼做。

您可能已經注意到的另一件事是,我們沒有為 monolog/monolog 指定套件存放庫。那是怎麼運作的?答案就是 Packagist。

Packagist 是 Composer 的主要套件存放庫,而且預設已啟用。在 Packagist 上發布的任何內容都可以透過 Composer 自動取得。由於 Monolog 已在 Packagist 上 ,我們可以依賴它,而無需指定任何其他存放庫。

如果我們想與世界分享 hello-world ,我們也必須在 Packagist 上發布它。

您會拜訪 Packagist ,然後按「提交」按鈕。如果您尚未註冊,這將會提示您註冊,然後讓您提交 VCS 存放庫的網址,此時 Packagist 會開始爬取。一旦完成,您的套件就會提供給所有人!

輕量級的發行套件#

通常不應在已發行的套件中包含一些無用的資訊,例如 .github 目錄、大型範例、測試資料等。

.gitattributes 檔案是類似的 Git 專用檔案(類似 .gitignore ),也會存在於程式庫的根目錄中。在它存在且受 Git 追蹤時,它會覆寫本機和全球設定(分別為 .git/config ~/.gitconfig )。

使用 .gitattributes 來防止不需要的檔案膨脹 zip 發行套件。

// .gitattributes
/demo export-ignore
phpunit.xml.dist export-ignore
/.github/ export-ignore

透過檢查手動產生的 zip 檔案來測試它

git archive branchName --format zip -o file.zip

注意: 檔案仍會受到 Git 追蹤,但不會包含在 zip 發行套件中。這只適用於從 GitHub、GitLab 或 Bitbucket 等來源安裝的(即標記的版本)發行套件。

基本用法 | 命令列介面

發現錯字?這份文件有什麼問題嗎? 分岔並編輯 它!