PHP的包依賴管理工具Composer簡介

composer是一個基於項目的依賴管理器,負責將php項目的所依賴的包和庫安裝在項目的目錄中,默認不會不會安裝任何數據到全局.他用於取代以前pear工具php

1 安裝Composerredis

[plain] view plain copy
  1. curl -sS https://getcomposer.org/installer | php  
  2. mv composer.phar /usr/local/bin/composer  


2 簡單應用
咱們只須要聲明一個項目所依賴的包或庫便可,此後其餘的事情就由Composer來處理了。所以使用Composer最重要的就是在項目目錄中編寫composer.json配置文件。例如你有一個項目,須要依賴monolog,能夠這樣寫composer.json文件:
{
    "require":
    {
        "monolog/monolog": "1.2.*"
    }
}
有了此文件後,在項目目錄中執行composer install,即會在項目目錄的vendor/目錄下建立其所依賴的庫。
另外一方面,包含了composer.json的目錄,也能夠發佈出去,讓其餘人經過composer進行安裝。只須要在packagelist網站,把此包傳上去便可。

3 配置文件說明json

Composer使用json做爲其配置文件的格式。在工程的根目錄下composer.json所定義的包稱爲root包。在配置文件中有以下的屬性。數組

3.1 require
格式爲: "require":{"vendor-name/package-name":"version", ...}
名字部分會做爲vendor下的路徑進行建立
版本支持精確的版本號,也支持範圍如>=1.0; >=1.0,<2.0; ","做爲邏輯與,而"!"做爲邏輯或的意思。示例中使用了通配符*
版本也支持tag或branch名稱。
相似的有require-dev,前者用於聲明項目發佈版本的依賴包,後者用於聲明項目開發或測試中依賴的包。

3.2 autoloadcomposer

composer支持PSR-0,PSR-4,classmap及files包含以支持文件自動加載。PSR-4爲推薦方式。curl

3.2.1 Files類型
格式:"autoload":{"files":["path/to/1.php","path/to/2.php",...]}
支持將數組中的文件進行自動加載,文件的路徑相對於項目的根目錄。缺點是麻煩,須要將全部文件都寫進配置。

3.2.2 classmap類型
格式:"autoload":{"classmap": ["path/to/src1","path/to/src2",...]}
支持將數組中的路徑下的文件進行自動加載。其很方便,但缺點是一旦增長了新文件,須要執行dump-autoload命令從新生成映射文件vendor/composer/autoload_classmap.php。

3.2.3 psr-0類型
格式:"autoload":{"psr-0":{
                            "name1\\space\\":["path/",...],
                            "name2\\space\\":["path2/",...],
                          }
                 }
支持將命名空間映射到路徑。命名空間結尾的\\不可省略。當執行install或update時,加載信息會寫入vendor/composer/autoload_namespace.php文件。若是但願解析指定路徑下的全部命名空間,則將命名空間置爲空串便可。
須要注意的是對應name2\space\Foo類的類文件的路徑爲path2/name2/space/Foo.php

3.2.4 psr-4類型
格式:"autoload":{"psr-4":{
                            "name1\\space\\":["path/",...],
                            "name2\\space\\":["path2/",...],
                          }
                 }
支持將命名空間映射到路徑。命名空間結尾的\\不可省略。當執行install或update時,加載信息會寫入vendor/composer/autoload_psr4.php文件。若是但願解析指定路徑下的全部命名空間,則將命名空間置爲空串便可。
須要注意的是對應name2\space\Foo類的類文件的路徑爲path2/space/Foo.php,name2不出如今路徑中。

PSR-4和PSR-0最大的區別是對下劃線(underscore)的定義不一樣。PSR-4中,在類名中使用下劃線沒有任何特殊含義。而PSR-0則規定類名中的下劃線_會被轉化成目錄分隔符。

3.3 name
格式:"name":"vendor/package"
若是要發佈一個包,你須要指定包的名字信息。

3.4 version
格式:"version":"1.0.2"
若是要發佈一個包,你須要指定包的版本號。版本號的格式爲X.Y.Z或vX.Y.Z,其後能夠加後綴如-dev,-patch,-alpha,-beta或-RC。除dev外,尾上還可加一個數字,如1.0.0-alpha3。

3.5 description
格式:"description":"your own description at here!"
若是要發佈一個包,能夠指定一個簡短的介紹

3.5 type
格式:"type":"library"
說明包的類型,支持以下library,project,metapackage,composer-plugin,默認爲library

3.6 keywords
格式:"keywords":["logging","database","redis"]
一個數組的關鍵字,用於搜索或過濾時使用。

3.7 homepage
可選的,說明項目的網站地址

3.8 time/license
說明項目的時間和License,時間格式爲YY-MM-DD HH:MM:SS

3.9 authors
格式:"authors":[
                    {"name":"ss","email":"ss@ss.com","homepage":"","role":""},...
                ]
用於說明項目的做者信息,爲可選的。

3.10 support
格式:"support":{"emial":"","issues":"","forum":"","wiki":"","irc":"" }
用於說明項目的支持信息

3.11 conflict
用於聲明與本包有衝突的包的版本,使用相似於require。

3.12 replace
用於聲明須要替換的包,使用相似於require

3.13 provided
用於說明本包實現了某個包的接口

3.14 suggest
格式:"suggest":{"vendor/package":"Some description!"}
用於說明可選的,用於加強功能的包及說明。

4 命令行工具
有了配置文件後,即可以使用composer命令來執行,有以下命令
init                 進入交互式嚮導,在當前目錄下生成composer.json文件
install           根據配置進行安裝
    選項 --prefer-source
             --prefer-dist
             --dry-run
             --dev/--no-dev
             -o  將psr0/4轉換爲classmap以提高性能
update [package-name ...] 根據配置升級指定的包
search [pattern]                    從packagelist中搜索包
show   [package-name]      顯示包的信息
depends package               分析項目中包的依賴
validate                                  驗證配置文件內容
status                                    檢查代碼是修改信息
self-update                          升級composer自己
config                                    配置composer本地或全局選項,能夠--list顯示全部可配置項   格式爲conifg [option] [key] [value...]
create-project vendor/package path version 在指定路徑下下載一個項目,默認從packagelist上搜索
dump-autoload                   當類映射中加入新類時,用於更新加載器

5 自動加載

對於composer管理的依賴,若是但願自動加載只須要在文件中加入:require 'vendor/autoload.php'
拿上面的例子,使用依賴的類就十分簡單了,使用packet-name\class-name就能夠直接訪問了。如
$log = new Monolog\Logger();

6 雜項ide

composer.lock文件用於記錄各依賴的版本,若是使用了VCS,即此文件也須要進行提交。由於若是此文件存在,即composer會按照此文件中的版本進行下載,會忽略composer.json文件。若是須要更新版本,則須要修改composer.json,並執行update命令,此時會下載新版本,並更新composer.lock文件。工具

相關文章
相關標籤/搜索