鍍金池/ 教程/ PHP/ 基本用法
簡介 中文文檔
腳本
命令行
資源庫
庫(資源包)
Composer PHP依賴管理的新時代
插件
別名
自定義安裝程序
二進制供應(yīng)庫和 <code>vendor/bin</code> 目錄
如何為我的框架自定義一個資源包安裝目錄?
composer.json 架構(gòu)
我應(yīng)該提交 vendor 目錄中的依賴包嗎?
為什么 Composer 不遞歸加載儲存庫?
基本用法
為什么說“比較符”和“通配符”相結(jié)合的版本約束是壞主意?

基本用法

安裝

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

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

詳細請查看 簡介 章節(jié)。

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

php composer.phar

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

 **注意:** 你也可以僅執(zhí)行 `--check` 選項而無需下載 Composer。 要獲取更多的信息請使用 `--help`。

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

composer.json:項目安裝

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

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

關(guān)于 require Key

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

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

你可以看到, require 需要一個 包名稱 (例如 monolog/monolog) 映射到 包版本 (例如 1.0.*) 的對象。

包名稱

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

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

包版本

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

版本約束可以用幾個不同的方法來指定。

名稱 實例 描述
確切的版本號 `1.0.2` 你可以指定包的確切版本。
范圍 `>=1.0` `>=1.0,=1.0,=1.2` 通過使用比較操作符可以指定有效的版本范圍。 有效的運算符:`>`、`>=`、`
通配符 `1.0.*` 你可以使用通配符`*`來指定一種模式。`1.0.*`與`>=1.0,
賦值運算符 `~1.2` 這對于遵循語義化版本號的項目非常有用。`~1.2`相當于`>=1.2,

下一個重要版本(波浪號運算符)

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

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

穩(wěn)定性

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

安裝依賴包

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

php composer.phar install

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

小技巧: 如果你正在使用Git來管理你的項目, 你可能要添加 vendor 到你的 .gitignore 文件中。 你不會希望將所有的代碼都添加到你的版本庫中。

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

composer.lock - 鎖文件

在安裝依賴后,Composer 將把安裝時確切的版本號列表寫入 composer.lock 文件。這將鎖定改項目的特定版本。

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

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

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

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

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

php composer.phar update

如果只想安裝或更新一個依賴,你可以白名單它們:

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

注意: 對于庫,并不一定建議提交鎖文件 請參考:庫的鎖文件.

Packagist

packagist 是 Composer 的主要資源庫。 一個 Composer 的庫基本上是一個包的源:記錄了可以得到包的地方。Packagist 的目標是成為大家使用庫資源的中央存儲平臺。這意味著你可以 require 那里的任何包。

當你訪問 packagist website (packagist.org),你可以瀏覽和搜索資源包。

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

自動加載

對于庫的自動加載信息,Composer 生成了一個 vendor/autoload.php 文件。你可以簡單的引入這個文件,你會得到一個免費的自動加載支持。

require 'vendor/autoload.php';

這使得你可以很容易的使用第三方代碼。例如:如果你的項目依賴 monolog,你就可以像這樣開始使用這個類庫,并且他們將被自動加載。

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

$log->addWarning('Foo');

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

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

Composer 將注冊一個 PSR-4 autoloader 到 Acme 命名空間。

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

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

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

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

除了 PSR-4 自動加載,classmap 也是支持的。這允許類被自動加載,即使不符合 PSR-0 規(guī)范。詳細請查看 自動加載-參考

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

上一篇:腳本下一篇:資源庫