Composer 庫(kù)(資源包)

2018-09-28 20:22 更新

庫(kù)(資源包)

本章將告訴你如何通過(guò) Composer 來(lái)安裝你的庫(kù)。

每一個(gè)項(xiàng)目都是一個(gè)包

只要你有一個(gè) composer.json 文件在目錄中,那么整個(gè)目錄就是一個(gè)包。當(dāng)你添加一個(gè) require 到項(xiàng)目中,你就是在創(chuàng)建一個(gè)依賴于其它庫(kù)的包。你的項(xiàng)目和庫(kù)之間唯一的區(qū)別是,你的項(xiàng)目是一個(gè)沒(méi)有名字的包。

為了使它成為一個(gè)可安裝的包,你需要給它一個(gè)名稱。你可以通過(guò) composer.json 中的 name 來(lái)定義:

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

在這種情況下項(xiàng)目的名稱為 acme/hello-world,其中 acme 是供應(yīng)商的名稱。供應(yīng)商的名稱是必須填寫(xiě)的。

注意: 如果你不知道拿什么作為供應(yīng)商的名稱, 那么使用你 github 上的用戶名通常是不錯(cuò)的選擇。 雖然包名不區(qū)分大小寫(xiě),但慣例是使用小寫(xiě)字母,并用連字符作為單詞的分隔。

平臺(tái)軟件包

Composer 將那些已經(jīng)安裝在系統(tǒng)上,但并不是由 Composer 安裝的包視為一個(gè)虛擬的平臺(tái)軟件包。這包括PHP本身,PHP擴(kuò)展和一些系統(tǒng)庫(kù)。

  • php 表示用戶的 PHP 版本要求,你可以對(duì)其做出限制。例如 >=5.4.0。如果需要64位版本的 PHP,你可以使用 php-64bit 進(jìn)行限制。

  • hhvm 代表的是 HHVM(也就是 HipHop Virtual Machine) 運(yùn)行環(huán)境的版本,并且允許你設(shè)置一個(gè)版本限制,例如,'>=2.3.3'。

  • ext-<name> 可以幫你指定需要的 PHP 擴(kuò)展(包括核心擴(kuò)展)。通常 PHP 拓展的版本可以是不一致的,將它們的版本約束為 * 是一個(gè)不錯(cuò)的主意。一個(gè) PHP 擴(kuò)展包的例子:包名可以寫(xiě)成 ext-gd

  • lib-<name> 允許對(duì) PHP 庫(kù)的版本進(jìn)行限制。
    以下是可供使用的名稱:curl、iconv、icu、libxmlopenssl、pcre、uuid、xsl

你可以使用 composer show --platform 命令來(lái)獲取可用的平臺(tái)軟件包的列表。

指明版本

你需要一些方法來(lái)指明自己開(kāi)發(fā)的包的版本,當(dāng)你在 Packagist 上發(fā)布自己的包,它能夠從 VCS (git, svn, hg) 的信息推斷出包的版本,因此你不必手動(dòng)指明版本號(hào),并且也不建議這樣做。請(qǐng)查看 標(biāo)簽 和 分支 來(lái)了解版本號(hào)是如何被提取的。

如果你想要手動(dòng)創(chuàng)建并且真的要明確指定它,你只需要添加一個(gè) version 字段:

{
    "version": "1.0.0"
}

注意: 你應(yīng)該盡量避免手動(dòng)設(shè)置版本號(hào),因?yàn)闃?biāo)簽的值必須與標(biāo)簽名相匹配。

標(biāo)簽

對(duì)于每一個(gè)看起來(lái)像版本號(hào)的標(biāo)簽,都會(huì)相應(yīng)的創(chuàng)建一個(gè)包的版本。它應(yīng)該符合 'X.Y.Z' 或者 'vX.Y.Z' 的形式,-patch、-alpha-beta-RC 這些后綴是可選的。在后綴之后也可以再跟上一個(gè)數(shù)字。

下面是有效的標(biāo)簽名稱的幾個(gè)例子:

  • 1.0.0
  • v1.0.0
  • 1.10.5-RC1
  • v4.4.4beta2
  • v2.0.0-alpha
  • v2.0.4-p1

    注意: 即使你的標(biāo)簽帶有前綴 v, 由于在需要 require 一個(gè)版本的約束時(shí)是不允許這種前綴的, 因此 v 將被省略(例如標(biāo)簽 V1.0.0 將創(chuàng)建 1.0.0 版本)。

分支

對(duì)于每一個(gè)分支,都會(huì)相應(yīng)的創(chuàng)建一個(gè)包的開(kāi)發(fā)版本。如果分支名看起來(lái)像一個(gè)版本號(hào),那么將創(chuàng)建一個(gè)如同 {分支名}-dev 的包版本號(hào)。例如一個(gè)分支 2.0 將產(chǎn)生一個(gè) 2.0.x-dev 包版本(加入了 .x 是出于技術(shù)的原因,以確保它被識(shí)別為一個(gè)分支,而 2.0.x 的分支名稱也是允許的,它同樣會(huì)被轉(zhuǎn)換為 2.0.x-dev)。如果分支名看起來(lái)不像一個(gè)版本號(hào),它將會(huì)創(chuàng)建 dev-{分支名} 形式的版本號(hào)。例如 master 將產(chǎn)生一個(gè) dev-master 的版本號(hào)。

下面是版本分支名稱的一些示例:

  • 1.x
  • 1.0 (equals 1.0.x)
  • 1.1.x

    注意: 當(dāng)你安裝一個(gè)新的版本時(shí),將會(huì)自動(dòng)從它 source 中拉取。 詳細(xì)請(qǐng)查看 install 命令。

別名

它表示一個(gè)包版本的別名。例如,你可以為 dev-master 設(shè)置別名 1.0.x-dev,這樣就可以通過(guò) require 1.0.x-dev 來(lái)得到 dev-master 版本的包。

詳細(xì)請(qǐng)查看別名。

鎖文件

如果你愿意,可以在你的項(xiàng)目中提交 composer.lock 文件。他將幫助你的團(tuán)隊(duì)始終針對(duì)同一個(gè)依賴版本進(jìn)行測(cè)試。任何時(shí)候,這個(gè)鎖文件都只對(duì)于你的項(xiàng)目產(chǎn)生影響。

如果你不想提交鎖文件,并且你正在使用 Git,那么請(qǐng)將它添加到 .gitignore 文件中。

發(fā)布到 VCS(線上版本控制系統(tǒng))

一旦你有一個(gè)包含 composer.json 文件的庫(kù)存儲(chǔ)在線上版本控制系統(tǒng)(例如:Git),你的庫(kù)就可以被 Composer 所安裝。在這個(gè)例子中,我們將 acme/hello-world 庫(kù)發(fā)布在 GitHub 上的 github.com/username/hello-world 中。

現(xiàn)在測(cè)試這個(gè) acme/hello-world 包,我們?cè)诒镜貏?chuàng)建一個(gè)新的項(xiàng)目。我們將它命名為 acme/blog。此博客將依賴 acme/hello-world,而后者又依賴 monolog/monolog。我們可以在某處創(chuàng)建一個(gè)新的 blog 文件夾來(lái)完成它,并且需要包含 composer.json 文件:

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

在這個(gè)例子中 name 不是必須的,因?yàn)槲覀儾⒉幌雽⑺l(fā)布為一個(gè)庫(kù)。在這里為 composer.json 文件添加描述。

現(xiàn)在我們需要告訴我們的應(yīng)用,在哪里可以找到 hello-world 的依賴。為此我們需要在 composer.json 中添加 repositories 來(lái)源申明:

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

更多關(guān)于包的來(lái)源是如何工作的,以及還有什么其他的類型可供選擇,請(qǐng)查看資源庫(kù)。

這就是全部了。你現(xiàn)在可以使用 Composer 的 install 命令來(lái)安裝你的依賴包了!

小結(jié): 任何含有 composer.jsonGIT、SVN、HG 存儲(chǔ)庫(kù),都可以通過(guò) require 字段指定“包來(lái)源”和“聲明依賴”來(lái)添加到你的項(xiàng)目中。

發(fā)布到 packagist

好的,你現(xiàn)在可以發(fā)布你的包了,但你不會(huì)希望你的用戶每次都這樣繁瑣的指定包的來(lái)源。

你可能注意到了另一件事,我們并沒(méi)有指定 monolog/monolog 的來(lái)源。它是怎么工作的?答案是 packagist。

Packagist 是 Composer 主要的一個(gè)包信息存儲(chǔ)庫(kù),它默認(rèn)是啟用的。任何在 packagist 上發(fā)布的包都可以直接被 Composer 使用。就像 monolog 它被 發(fā)布在 packagist 上,我們可以直接使用它,而不必指定任何額外的來(lái)源信息。

如果我們想與世界分享我們的 hello-world,我們最好將它發(fā)布到 packagist 上。這樣做是很容易的。

你只需要點(diǎn)擊那個(gè)大大的 "Submit Package" 按鈕并注冊(cè)。接著提交你庫(kù)的來(lái)源地址,此時(shí) packagist 就開(kāi)始了抓取。一旦完成,你的包將可以提供給任何人使用。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)