本章將告訴你如何通過 Composer 來安裝你的庫。
只要你有一個 composer.json
文件在目錄中,那么整個目錄就是一個包。當(dāng)你添加一個 require
到項目中,你就是在創(chuàng)建一個依賴于其它庫的包。你的項目和庫之間唯一的區(qū)別是,你的項目是一個沒有名字的包。
為了使它成為一個可安裝的包,你需要給它一個名稱。你可以通過 composer.json
中的 name
來定義:
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
在這種情況下項目的名稱為 acme/hello-world
,其中 acme
是供應(yīng)商的名稱。供應(yīng)商的名稱是必須填寫的。
注意: 如果你不知道拿什么作為供應(yīng)商的名稱, 那么使用你 github 上的用戶名通常是不錯的選擇。 雖然包名不區(qū)分大小寫,但慣例是使用小寫字母,并用連字符作為單詞的分隔。
Composer 將那些已經(jīng)安裝在系統(tǒng)上,但并不是由 Composer 安裝的包視為一個虛擬的平臺軟件包。這包括PHP本身,PHP擴(kuò)展和一些系統(tǒng)庫。
php
表示用戶的 PHP 版本要求,你可以對其做出限制。例如 >=5.4.0
。如果需要64位版本的 PHP,你可以使用 php-64bit
進(jìn)行限制。
hhvm
代表的是 HHVM(也就是 HipHop Virtual Machine) 運(yùn)行環(huán)境的版本,并且允許你設(shè)置一個版本限制,例如,'>=2.3.3'。
ext-<name>
可以幫你指定需要的 PHP 擴(kuò)展(包括核心擴(kuò)展)。通常 PHP 拓展的版本可以是不一致的,將它們的版本約束為 *
是一個不錯的主意。一個 PHP 擴(kuò)展包的例子:包名可以寫成 ext-gd
。
lib-<name>
允許對 PHP 庫的版本進(jìn)行限制。curl
、iconv
、icu
、libxml
、openssl
、pcre
、uuid
、xsl
。你可以使用 composer show --platform
命令來獲取可用的平臺軟件包的列表。
你需要一些方法來指明自己開發(fā)的包的版本,當(dāng)你在 Packagist 上發(fā)布自己的包,它能夠從 VCS (git, svn, hg) 的信息推斷出包的版本,因此你不必手動指明版本號,并且也不建議這樣做。請查看 標(biāo)簽 和 分支 來了解版本號是如何被提取的。
如果你想要手動創(chuàng)建并且真的要明確指定它,你只需要添加一個 version
字段:
{
"version": "1.0.0"
}
注意: 你應(yīng)該盡量避免手動設(shè)置版本號,因?yàn)闃?biāo)簽的值必須與標(biāo)簽名相匹配。
對于每一個看起來像版本號的標(biāo)簽,都會相應(yīng)的創(chuàng)建一個包的版本。它應(yīng)該符合 'X.Y.Z' 或者 'vX.Y.Z' 的形式,-patch
、-alpha
、-beta
或 -RC
這些后綴是可選的。在后綴之后也可以再跟上一個數(shù)字。
下面是有效的標(biāo)簽名稱的幾個例子:
v2.0.4-p1
注意: 即使你的標(biāo)簽帶有前綴 v
, 由于在需要 require
一個版本的約束時是不允許這種前綴的, 因此 v
將被省略(例如標(biāo)簽 V1.0.0
將創(chuàng)建 1.0.0
版本)。
對于每一個分支,都會相應(yīng)的創(chuàng)建一個包的開發(fā)版本。如果分支名看起來像一個版本號,那么將創(chuàng)建一個如同 {分支名}-dev
的包版本號。例如一個分支 2.0
將產(chǎn)生一個 2.0.x-dev
包版本(加入了 .x
是出于技術(shù)的原因,以確保它被識別為一個分支,而 2.0.x
的分支名稱也是允許的,它同樣會被轉(zhuǎn)換為 2.0.x-dev
)。如果分支名看起來不像一個版本號,它將會創(chuàng)建 dev-{分支名}
形式的版本號。例如 master
將產(chǎn)生一個 dev-master
的版本號。
下面是版本分支名稱的一些示例:
1.1.x
注意: 當(dāng)你安裝一個新的版本時,將會自動從它 source
中拉取。 詳細(xì)請查看 install 命令。
它表示一個包版本的別名。例如,你可以為 dev-master
設(shè)置別名 1.0.x-dev
,這樣就可以通過 require 1.0.x-dev
來得到 dev-master
版本的包。
詳細(xì)請查看別名。
如果你愿意,可以在你的項目中提交 composer.lock
文件。他將幫助你的團(tuán)隊始終針對同一個依賴版本進(jìn)行測試。任何時候,這個鎖文件都只對于你的項目產(chǎn)生影響。
如果你不想提交鎖文件,并且你正在使用 Git,那么請將它添加到 .gitignore
文件中。
一旦你有一個包含 composer.json
文件的庫存儲在線上版本控制系統(tǒng)(例如:Git),你的庫就可以被 Composer 所安裝。在這個例子中,我們將 acme/hello-world
庫發(fā)布在 GitHub 上的 github.com/username/hello-world
中。
現(xiàn)在測試這個 acme/hello-world
包,我們在本地創(chuàng)建一個新的項目。我們將它命名為 acme/blog
。此博客將依賴 acme/hello-world
,而后者又依賴 monolog/monolog
。我們可以在某處創(chuàng)建一個新的 blog
文件夾來完成它,并且需要包含 composer.json
文件:
{
"name": "acme/blog",
"require": {
"acme/hello-world": "dev-master"
}
}
在這個例子中 name
不是必須的,因?yàn)槲覀儾⒉幌雽⑺l(fā)布為一個庫。在這里為 composer.json
文件添加描述。
現(xiàn)在我們需要告訴我們的應(yīng)用,在哪里可以找到 hello-world
的依賴。為此我們需要在 composer.json
中添加 repositories
來源申明:
{
"name": "acme/blog",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
"require": {
"acme/hello-world": "dev-master"
}
}
更多關(guān)于包的來源是如何工作的,以及還有什么其他的類型可供選擇,請查看資源庫。
這就是全部了。你現(xiàn)在可以使用 Composer 的 install
命令來安裝你的依賴包了!
小結(jié): 任何含有 composer.json
的 GIT
、SVN
、HG
存儲庫,都可以通過 require
字段指定“包來源”和“聲明依賴”來添加到你的項目中。
好的,你現(xiàn)在可以發(fā)布你的包了,但你不會希望你的用戶每次都這樣繁瑣的指定包的來源。
你可能注意到了另一件事,我們并沒有指定 monolog/monolog
的來源。它是怎么工作的?答案是 packagist。
Packagist 是 Composer 主要的一個包信息存儲庫,它默認(rèn)是啟用的。任何在 packagist 上發(fā)布的包都可以直接被 Composer 使用。就像 monolog 它被 發(fā)布在 packagist 上,我們可以直接使用它,而不必指定任何額外的來源信息。
如果我們想與世界分享我們的 hello-world
,我們最好將它發(fā)布到 packagist 上。這樣做是很容易的。
你只需要點(diǎn)擊那個大大的 "Submit Package" 按鈕并注冊。接著提交你庫的來源地址,此時 packagist 就開始了抓取。一旦完成,你的包將可以提供給任何人使用。
更多建議: