基本用法

2018-02-24 16:19 更新

安裝

安裝 Composer,你只需要下載?composer.phar?可執(zhí)行文件。

curl -sS https://getcomposer.org/installer | php

詳細(xì)請(qǐng)查看?簡(jiǎn)介?章節(jié)。

要檢查 Composer 是否正常工作,只需要通過(guò)?php?來(lái)執(zhí)行 PHAR:

php composer.phar

這將返回給你一個(gè)可執(zhí)行的命令列表。

注意:?你也可以?xún)H執(zhí)行?--check?選項(xiàng)而無(wú)需下載 Composer。 要獲取更多的信息請(qǐng)使用?--help。

curl -sS https://getcomposer.org/installer | php -- --help

composer.json:項(xiàng)目安裝

要開(kāi)始在你的項(xiàng)目中使用 Composer,你只需要一個(gè)?composer.json?文件。該文件包含了項(xiàng)目的依賴(lài)和其它的一些元數(shù)據(jù)。

這個(gè)?JSON format?是很容易編寫(xiě)的。它允許你定義嵌套結(jié)構(gòu)。

關(guān)于?require?Key

第一件事情(并且往往只需要做這一件事),你需要在?composer.json?文件中指定?require?key 的值。你只需要簡(jiǎn)單的告訴 Composer 你的項(xiàng)目需要依賴(lài)哪些包。

{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

你可以看到,?require?需要一個(gè)?包名稱(chēng)?(例如?monolog/monolog) 映射到?包版本?(例如?1.0.*) 的對(duì)象。

包名稱(chēng)

包名稱(chēng)由供應(yīng)商名稱(chēng)和其項(xiàng)目名稱(chēng)構(gòu)成。通常容易產(chǎn)生相同的項(xiàng)目名稱(chēng),而供應(yīng)商名稱(chēng)的存在則很好的解決了命名沖突的問(wèn)題。它允許兩個(gè)不同的人創(chuàng)建同樣名為?json?的庫(kù),而之后它們將被命名為?igorw/json?和?seldaek/json。

這里我們需要引入?monolog/monolog,供應(yīng)商名稱(chēng)與項(xiàng)目的名稱(chēng)相同,對(duì)于一個(gè)具有唯一名稱(chēng)的項(xiàng)目,我們推薦這么做。它還允許以后在同一個(gè)命名空間添加更多的相關(guān)項(xiàng)目。如果你維護(hù)著一個(gè)庫(kù),這將使你可以很容易的把它分離成更小的部分。

包版本

在前面的例子中,我們引入的 monolog 版本指定為?1.0.*。這表示任何從?1.0?開(kāi)始的開(kāi)發(fā)分支,它將會(huì)匹配1.0.01.0.2?或者?1.0.20。

版本約束可以用幾個(gè)不同的方法來(lái)指定。

名稱(chēng) 實(shí)例 描述
確切的版本號(hào) 1.0.2 你可以指定包的確切版本。
范圍 >=1.0?>=1.0,=1.0,=1.2 通過(guò)使用比較操作符可以指定有效的版本范圍。?有效的運(yùn)算符:>、>=<、<=!=。?你可以定義多個(gè)范圍,用逗號(hào)隔開(kāi),這將被視為一個(gè)邏輯AND處理。一個(gè)管道符號(hào)\|將作為邏輯OR處理。?AND 的優(yōu)先級(jí)高于 OR。
通配符 1.0.* 你可以使用通配符*來(lái)指定一種模式。1.0.*>=1.0,<1.1是等效的。
賦值運(yùn)算符 ~1.2 這對(duì)于遵循語(yǔ)義化版本號(hào)的項(xiàng)目非常有用。~1.2相當(dāng)于>=1.2,<2.0。想要了解更多,請(qǐng)閱讀下一小節(jié)。

下一個(gè)重要版本(波浪號(hào)運(yùn)算符)

~?最好用例子來(lái)解釋?zhuān)?~1.2?相當(dāng)于?>=1.2,=1.2.3,<1.3。正如你所看到的這對(duì)于遵循?語(yǔ)義化版本號(hào)?的項(xiàng)目最有用。一個(gè)常見(jiàn)的用法是標(biāo)記你所依賴(lài)的最低版本,像?~1.2?(允許1.2以上的任何版本,但不包括2.0)。由于理論上直到2.0應(yīng)該都沒(méi)有向后兼容性問(wèn)題,所以效果很好。你還會(huì)看到它的另一種用法,使用?~?指定最低版本,但允許版本號(hào)的最后一位數(shù)字上升。

注意:?雖然?2.0-beta.1?嚴(yán)格地說(shuō)是早于?2.0,但是,根據(jù)版本約束條件, 例如?~1.2?卻不會(huì)安裝這個(gè)版本。就像前面所講的?~1.2?只意味著?.2?部分可以改變,但是?1.?部分是固定的。

穩(wěn)定性

默認(rèn)情況下只有穩(wěn)定的發(fā)行版才會(huì)被考慮在內(nèi)。如果你也想獲得 RC、beta、alpha 或 dev 版本,你可以使用?穩(wěn)定標(biāo)志。你可以對(duì)所有的包做?最小穩(wěn)定性?設(shè)置,而不是每個(gè)依賴(lài)逐一設(shè)置。

安裝依賴(lài)包

獲取定義的依賴(lài)到你的本地項(xiàng)目,只需要調(diào)用?composer.phar?運(yùn)行?install?命令。

php composer.phar install

接著前面的例子,這將會(huì)找到?monolog/monolog?的最新版本,并將它下載到?vendor?目錄。 這是一個(gè)慣例把第三方的代碼到一個(gè)指定的目錄?vendor。如果是 monolog 將會(huì)創(chuàng)建?vendor/monolog/monolog?目錄。

小技巧:?如果你正在使用Git來(lái)管理你的項(xiàng)目, 你可能要添加?vendor?到你的?.gitignore?文件中。 你不會(huì)希望將所有的代碼都添加到你的版本庫(kù)中。

另一件事是?install?命令將創(chuàng)建一個(gè)?composer.lock?文件到你項(xiàng)目的根目錄中。

composer.lock?- 鎖文件

在安裝依賴(lài)后,Composer 將把安裝時(shí)確切的版本號(hào)列表寫(xiě)入?composer.lock?文件。這將鎖定改項(xiàng)目的特定版本。

請(qǐng)?zhí)峤荒銘?yīng)用程序的?composer.lock?(包括?composer.json)到你的版本庫(kù)中

這是非常重要的,因?yàn)?install?命令將會(huì)檢查鎖文件是否存在,如果存在,它將下載指定的版本(忽略?composer.json?文件中的定義)。

這意味著,任何人建立項(xiàng)目都將下載與指定版本完全相同的依賴(lài)。你的持續(xù)集成服務(wù)器、生產(chǎn)環(huán)境、你團(tuán)隊(duì)中的其他開(kāi)發(fā)人員、每件事、每個(gè)人都使用相同的依賴(lài),從而減輕潛在的錯(cuò)誤對(duì)部署的影響。即使你獨(dú)自開(kāi)發(fā)項(xiàng)目,在六個(gè)月內(nèi)重新安裝項(xiàng)目時(shí),你也可以放心的繼續(xù)工作,即使從那時(shí)起你的依賴(lài)已經(jīng)發(fā)布了許多新的版本。

如果不存在?composer.lock?文件,Composer 將讀取?composer.json?并創(chuàng)建鎖文件。

這意味著如果你的依賴(lài)更新了新的版本,你將不會(huì)獲得任何更新。此時(shí)要更新你的依賴(lài)版本請(qǐng)使用?update?命令。這將獲取最新匹配的版本(根據(jù)你的?composer.json?文件)并將新版本更新進(jìn)鎖文件。

php composer.phar update

如果只想安裝或更新一個(gè)依賴(lài),你可以白名單它們:

php composer.phar update monolog/monolog [...]

注意:?對(duì)于庫(kù),并不一定建議提交鎖文件 請(qǐng)參考:庫(kù)的鎖文件.

Packagist

packagist?是 Composer 的主要資源庫(kù)。 一個(gè) Composer 的庫(kù)基本上是一個(gè)包的源:記錄了可以得到包的地方。Packagist 的目標(biāo)是成為大家使用庫(kù)資源的中央存儲(chǔ)平臺(tái)。這意味著你可以?require?那里的任何包。

當(dāng)你訪(fǎng)問(wèn)?packagist website?(packagist.org),你可以瀏覽和搜索資源包。

任何支持 Composer 的開(kāi)源項(xiàng)目應(yīng)該發(fā)布自己的包在 packagist 上。雖然并不一定要發(fā)布在 packagist 上來(lái)使用 Composer,但它使我們的編程生活更加輕松。

自動(dòng)加載

對(duì)于庫(kù)的自動(dòng)加載信息,Composer 生成了一個(gè)?vendor/autoload.php?文件。你可以簡(jiǎn)單的引入這個(gè)文件,你會(huì)得到一個(gè)免費(fèi)的自動(dòng)加載支持。

require 'vendor/autoload.php';

這使得你可以很容易的使用第三方代碼。例如:如果你的項(xiàng)目依賴(lài) monolog,你就可以像這樣開(kāi)始使用這個(gè)類(lèi)庫(kù),并且他們將被自動(dòng)加載。

$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));

$log->addWarning('Foo');

你可以在?composer.json?的?autoload?字段中增加自己的 autoloader。

{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}

Composer 將注冊(cè)一個(gè)?PSR-4?autoloader 到?Acme?命名空間。

你可以定義一個(gè)從命名空間到目錄的映射。此時(shí)?src?會(huì)在你項(xiàng)目的根目錄,與?vendor?文件夾同級(jí)。例如?src/Foo.php?文件應(yīng)該包含?Acme\Foo?類(lèi)。

添加?autoload?字段后,你應(yīng)該再次運(yùn)行?install?命令來(lái)生成?vendor/autoload.php?文件。

引用這個(gè)文件也將返回 autoloader 的實(shí)例,你可以將包含調(diào)用的返回值存儲(chǔ)在變量中,并添加更多的命名空間。這對(duì)于在一個(gè)測(cè)試套件中自動(dòng)加載類(lèi)文件是非常有用的,例如。

$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);

除了 PSR-4 自動(dòng)加載,classmap 也是支持的。這允許類(lèi)被自動(dòng)加載,即使不符合 PSR-0 規(guī)范。詳細(xì)請(qǐng)查看?自動(dòng)加載-參考。

注意:?Composer 提供了自己的 autoloader。如果你不想使用它,你可以?xún)H僅引入?vendor/composer/autoload_*.php?文件,它返回一個(gè)關(guān)聯(lián)數(shù)組,你可以通過(guò)這個(gè)關(guān)聯(lián)數(shù)組配置自己的 autoloader。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)