composer.json:項目安裝!!!!!!!!!!

基本用法



安裝

安裝 Composer,你只須要下載 composer.phar 可執行文件。php

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

詳細請查看 簡介 章節。html

要檢查 Composer 是否正常工做,只須要經過 php 來執行 PHAR:git

php composer.phar

這將返回給你一個可執行的命令列表。web

注意: 你也能夠僅執行 --check 選項而無需下載 Composer。 要獲取更多的信息請使用 --help編程

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

composer.json:項目安裝

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

這個 JSON format 是很容易編寫的。它容許你定義嵌套結構。數組

關於 require Key

第一件事情(而且每每只須要作這一件事),你須要在 composer.json 文件中指定 require key 的值。你只須要簡單的告訴 Composer 你的項目須要依賴哪些包。服務器

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

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

包名稱

包名稱由供應商名稱和其項目名稱構成。一般容易產生相同的項目名稱,而供應商名稱的存在則很好的解決了命名衝突的問題。它容許兩個不一樣的人建立一樣名爲 json 的庫,而以後它們將被命名爲 igorw/jsonseldaek/jsoncomposer

這裏咱們須要引入 monolog/monolog,供應商名稱與項目的名稱相同,對於一個具備惟一名稱的項目,咱們推薦這麼作。它還容許之後在同一個命名空間添加更多的相關項目。若是你維護着一個庫,這將使你能夠很容易的把它分離成更小的部分。

包版本

在前面的例子中,咱們引入的 monolog 版本指定爲 1.0.*。這表示任何從 1.0 開始的開發分支,它將會匹配 1.0.01.0.2 或者 1.0.20

版本約束能夠用幾個不一樣的方法來指定。

名稱 實例 描述
確切的版本號 1.0.2 你能夠指定包的確切版本。
範圍 >=1.0 >=1.0,<2.0 >=1.0,<1.1|>=1.2 經過使用比較操做符能夠指定有效的版本範圍。
有效的運算符:>>=<<=!=
你能夠定義多個範圍,用逗號隔開,這將被視爲一個邏輯AND處理。一個管道符號|將做爲邏輯OR處理。
AND 的優先級高於 OR。
通配符 1.0.* 你可使用通配符*來指定一種模式。1.0.*>=1.0,<1.1是等效的。
賦值運算符 ~1.2 這對於遵循語義化版本號的項目很是有用。~1.2至關於>=1.2,<2.0。想要了解更多,請閱讀下一小節。

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

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

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

穩定性

默認狀況下只有穩定的發行版纔會被考慮在內。若是你也想得到 RC、beta、alpha 或 dev 版本,你可使用 穩定標誌。你能夠對全部的包作 最小穩定性 設置,而不是每一個依賴逐一設置。

安裝依賴包

獲取定義的依賴到你的本地項目,只須要調用 composer.phar 運行 install 命令。

php composer.phar install

接着前面的例子,這將會找到 monolog/monolog 的最新版本,並將它下載到 vendor 目錄。 這是一個慣例把第三方的代碼到一個指定的目錄 vendor。若是是 monolog 將會建立 vendor/monolog/monolog 目錄。

小技巧: 若是你正在使用Git來管理你的項目, 你可能要添加 vendor 到你的 .gitignore 文件中。 你不會但願將全部的代碼都添加到你的版本庫中。

另外一件事是 install 命令將建立一個 composer.lock 文件到你項目的根目錄中。

composer.lock - 鎖文件

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

請提交你應用程序的 composer.lock (包括 composer.json)到你的版本庫中

這是很是重要的,由於 install 命令將會檢查鎖文件是否存在,若是存在,它將下載指定的版本(忽略 composer.json 文件中的定義)。

這意味着,任何人創建項目都將下載與指定版本徹底相同的依賴。你的持續集成服務器、生產環境、你團隊中的其餘開發人員、每件事、每一個人都使用相同的 依賴,從而減輕潛在的錯誤對部署的影響。即便你獨自開發項目,在六個月內從新安裝項目時,你也能夠放心的繼續工做,即便從那時起你的依賴已經發布了許多新 的版本。

若是不存在 composer.lock 文件,Composer 將讀取 composer.json 並建立鎖文件。

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

php composer.phar update

若是隻想安裝或更新一個依賴,你能夠白名單它們:

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

注意: 對於庫,並不必定建議提交鎖文件 請參考:庫的鎖文件.

Packagist

packagist 是 Composer 的主要資源庫。 一個 Composer 的庫基本上是一個包的源:記錄了能夠獲得包的地方。Packagist 的目標是成爲你們使用庫資源的中央存儲平臺。這意味着你能夠 require 那裏的任何包。

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

任何支持 Composer 的開源項目應該發佈本身的包在 packagist 上。雖然並不必定要發佈在 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 文件應該包含 Acme\Foo 類。

添加 autoload 字段後,你應該再次運行 install 命令來生成 vendor/autoload.php 文件。

引用這個文件也將返回 autoloader 的實例,你能夠將包含調用的返回值存儲在變量中,並添加更多的命名空間。這對於在一個測試套件中自動加載類文件是很是有用的,例如。

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

除了 PSR-4 自動加載,classmap 也是支持的。這容許類被自動加載,即便不符合 PSR-0 規範。詳細請查看 自動加載-參考

注意: Composer 提供了本身的 autoloader。若是你不想使用它,你能夠僅僅引入 vendor/composer/autoload_*.php 文件,它返回一個關聯數組,你能夠經過這個關聯數組配置本身的 autoloader。

相關文章
相關標籤/搜索