首先看下phpcomposer官方的定義,composer是 PHP 用來
管理依賴(dependency)關係的工具。你能夠在本身的項目中聲明所依賴的外部工具庫(libraries),Composer 會幫你安裝這些依賴的庫文件。
composer能夠幫助咱們快速安裝類庫,經過過composer,咱們可使用大量的第三方庫,而無需本身造輪子,如今不少流行框架很注重使用composer,由於你可使用大量優秀的輪子,大大提升效率.
注意是管理依賴,好比包a須要包b和c當咱們安裝a的時候並不須要考慮包b和包c的安裝,這不只僅是一個包的安裝工具
1 安裝composer
1.1 下載並安裝
window安裝,使用安裝程序
linux安裝
你能夠將此文件放在任何地方。若是你把它放在系統的 PATH 目錄中,你就能在全局訪問它。
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
1.2 composer的鏡像更換
通常狀況下,安裝包的數據(主要是 zip 文件)通常是從 github.com 上下載的,安裝包的元數據是從 packagist.org 上下載的。
然而,因爲衆所周知的緣由,國外的網站鏈接速度很慢,而且隨時可能被「牆」甚至「不存在」。
「Packagist 中國全量鏡像」所作的就是緩存全部安裝包和元數據到國內的機房並經過國內的 CDN 進行加速,這樣就沒必要再去向國外的網站發起請求,從而達到加速 composer install以及 composer update 的過程,而且更加快速、穩定。所以,即便 packagist.org、github.com 發生故障(主要是鏈接速度太慢和被牆),你仍然能夠下載、更新安裝包
方法一: 修改 composer 的全局配置文件(推薦方式)
打開命令行窗口(windows用戶)或控制檯(Linux、Mac 用戶)並執行以下命令:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
方法二: 修改當前項目的 composer.json 配置文件:
打開命令行窗口(windows用戶)或控制檯(Linux、Mac 用戶),進入你的項目的根目錄(也就是 composer.json 文件所在目錄),執行以下命令:
composer config repo.packagist composer https://packagist.phpcomposer.com
上述命令將會在當前項目中的 composer.json 文件的末尾自動添加鏡像的配置信息(你也能夠本身手工添加):
"repositories": { "packagist": { "type": "composer", "url": "https://packagist.phpcomposer.com" } }
2 使用composer
2.1 方法1:經過composer require命令安裝擴展包
composer require monolog/monolog
安裝成功後的目錄結構,注意咱們在根目錄下獲得了vender文件夾(包下載後存放位置),composer.json和composer.lock文件(能夠說這兩個是包管理的指引文件)
2.2 方法2:編寫composer.json文件,而後根據該文件安裝擴展包.
composer.json文件包含了項目的依賴和其它的一些元數據。
可使用 composer init 命令,初始化一個json文件
在 composer.json 文件中指定 require key 的值。告訴 Composer 你的項目須要依賴哪些包。
{ "require": { "monolog/monolog": "1.0.*" } }
安裝上面的依賴
composer install
和是用composer require 命令同樣相同的結果,咱們獲得了 monolog/monolog 包,並將它下載到 vendor 目錄,並且咱們也獲得了composer.lock文件
2.3 關於開發過程當中包的管理小建議:
1> 若是你正在使用Git來管理你的項目, 你可能要添加 vendor 到你的 .gitignore 文件中。 你不會但願將全部的代碼都添加到你的版本庫中。
2>install 命令將建立一個 composer.lock 文件到你項目的根目錄中。請提交你應用程序的 composer.lock (包括 composer.json)到你的版本庫中
2.4 關於如何安裝擴展包,進行管理
composer install - 若有 composer.lock 文件,直接安裝,不然從 composer.json 安裝最新擴展包和依賴;
composer update - 從 composer.json 安裝全部最新擴展包和依賴,同時也能夠刪除依賴,注意是全部,慎用,慎用,慎用;
composer update vendor/package - 從 composer.json 或者對應包的配置,並更新到最新;
composer require new/package - 添加安裝 new/package, 能夠指定版本,如: composer require new/package ~2.5.
雖然說有多重更新的方案,可是爲了項目的穩定性,建議使用require下載和更新擴展包
composer require "monolog/monolog:1.0.*" 經過指定版本能夠更新擴展包
3 自動加載
如何引用這些庫文件。最簡單的方式就是require或者include,但這就不夠高大上了啊,好在composer能夠幫咱們解決這個問題。那就是autoload。
那麼如何讓composer幫咱們自動加載這個類呢?
composer 自動加載設置了 4種 加載方式 :
- files
- classmap
- PSR-0
- PSR-4
並推薦使用 PSR-4 規範
下面分別來探討,在composer.json定義這幾種加載方式:
3.1 使用Files方式(ps:一般做爲函數庫的載入方式(而非類庫))
1> files 就是直接簡單粗暴的加載文件。在 composer 執行 install 等操做時, composer 會把文件中的配置存儲在 vendor/composer/autoload_static.php 文件中的生成一個 $files 數組。
2> composer.json 配置
"autoload": { "files": ["Lionis/Cool.php"] }
3> files鍵對應的值是一個數組,數組元素是文件的路徑,路徑是相對於應用的根目錄。
3.2 Classmap方式自動加載
1> classmap 經過配置指定的目錄和文件,在 composer 執行 install 等操做時, composer 會去掃描對應的目錄下以 .php 結尾的文件中的 class ,並存儲在 vendor/composer/autoload_classmap.php 文件中的返回數組中。
2> composer.json 配置
"autoload": { "classmap": [ "Lionis/", ] }
3> 若是 Lionis 下有一個叫 Cool的文件,當程序須要Cool類時,compoer的自動加載類經過查找Cool類所在的文件,而後再將改文件include進來。
3.3 PSR-0加載方式
1>
要求命名空間和目錄層層對應,且可使用 _ 做爲路徑分隔符,可是這會致使目錄結果變得過深,在 composer 執行 install 等操做時, composer 會把文件中的配置存儲在 vendor/composer/autoload_psr0.php 文件中的返回數組中。
2> composer.json 配置
"autoload": { "psr-0": { "Very\\Good": "vendor\Lionis" } }
在調用 use Very\Good\Love\SomeClass的時候,實際加載目錄爲 vendor/Lionis/Very/Good/Love/SomeClass.php
3.4 PSR-4加載方式
1> 與 PSR-0 不一樣的是,取消掉了 _ 做爲分隔符和目錄結構。在 composer 執行 install 等操做時, composer 會把文件中的配置存儲在 vendor/composer/autoload_psr4.php 文件中的返回數組中。
2> composer.json 配置
"autoload": { "psr-4": { "Very\\Good": "vendor\Lionis" } }
在調用 use Very\Good\Love\SomeClass的時候,實際加載目錄爲 vendor/Lionis/Love/SomeClass.php,發現咱們並不必定要有Very/Good文件層次
小結
composer 經過使用 composer.json ,用 json 的格式來指定咱們須要自動加載的規則 ,當咱們在 composer 執行 install 等操做時,composer會根據這些規則自動生成相應規則的自動加載文件,並存儲在vendor/composer下的相應文件中,咱們只要在入口文件引入 vendor/autoload.php 就能很方便的便能使用自動加載 。
//關於自動加載,推薦文章
http://www.tuicool.com/articles/QNNFvmf
https://segmentfault.com/a/1190000005085600
http://blog.csdn.net/hel12he/article/details/46503875
簡單命令
composer require cuab/phpcrawl
composer init 初始化一個json文件
composer install 安裝json中的依賴
composer update 更新json中的依賴,能夠刪除相應的依賴
composer search phpcrawl
composer show --all cuab/phpcrawl