函式庫#
本章節將說明如何透過 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-world
,acme/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 等來源安裝的(即標記的版本)發行套件。
發現錯字?這份文件有什麼問題嗎? 分岔並編輯 它!