composer是現(xiàn)代PHP的基石
現(xiàn)代高級編程語言,依賴管理工具是必不可少的斩个。Java有Maven胯杭,Python有pip,Nodejs有npm, 而在composer出現(xiàn)之前受啥,PHP只有被廣為詬病的Pear, 由于Pear實(shí)在太難用做个,很少PHP開發(fā)者用到這個(gè)工具。以致于PHP的開發(fā)生態(tài)很糟糕滚局。
連一個(gè)像樣的依賴管理工具都沒有居暖,讓PHP這門占據(jù)了web網(wǎng)站開發(fā)主流市場的語言很尷尬。開發(fā)過程中藤肢,要用到第三方的類庫太闺,需要去下載zip包,然后解壓嘁圈,放到相應(yīng)的目錄省骂,處理好命名空間,自動(dòng)加載的問題最住,如果這個(gè)第三方包還有其他依賴項(xiàng)钞澳,還要再次重復(fù)這個(gè)流程,看著隔壁家python和node.js一個(gè)命令行就搞定涨缚,顯得php開發(fā)人員的操作既原始又滑稽轧粟。
這場面,好比:
所幸,金光閃閃的composer駕著七彩祥云來了兰吟,PHP終于有了真正意義的依賴管理工具通惫。可以說混蔼,composer是現(xiàn)代PHP的基石讽膏。
composer解決了項(xiàng)目的依賴關(guān)系,且實(shí)現(xiàn)了自動(dòng)加載拄丰。開發(fā)人員只需要幾個(gè)命令行,就能獲取其他開發(fā)者的包俐末,PHP開發(fā)工作因此變得如同堆積木料按,可以根據(jù)業(yè)務(wù)的需求,快速方便地拆解組合代碼卓箫。
奇怪的是载矿,即使compoer已經(jīng)誕生好些年了,而且所有主流框架都支持composer烹卒,可竟然還有不少PHP開發(fā)者不用這個(gè)工具闷盔。甚至還有人覺得composer加大了PHP的學(xué)習(xí)難度。
持有這種想法的人旅急,就好像是一輩子都用紙筆手工記賬逢勾,有朝一日,給他配置了電腦藐吮,跟他演示了excel是如何地強(qiáng)大溺拱。他不為新事物的強(qiáng)大感到震撼驚喜,而是蹙眉不滿地說:“這東西太難學(xué)了谣辞,我還是習(xí)慣用紙筆”迫摔。
對于持有這種想法的人,我只能兩手一攤泥从。心態(tài)衰老的年輕人句占,如果他的內(nèi)心一直在裝睡,任誰也叫不醒躯嫉。但時(shí)代的步伐可不會因?yàn)樗麄兊睦笸榷V骨斑M(jìn)纱烘,只會把他們遠(yuǎn)遠(yuǎn)甩在身后...
安裝流程
composer的安裝步驟,在composr中文社區(qū)有詳細(xì)的說明和敬,點(diǎn)擊查看
安裝的流程很簡單凹炸,歸結(jié)為以下幾步:
# 下載安裝腳本 - composer-setup.php - 到當(dāng)前目錄
$ php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
# 執(zhí)行安裝過程
$ php composer-setup.php
# 刪除安裝腳本
$ php -r "unlink('composer-setup.php');"
# 全局安裝
$ sudo mv composer.phar /usr/local/bin/composer
# 更換為阿里云鏡像源
$ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
第一次使用
接下來,我們用composer來安裝第一個(gè)包
以 monolog
包為例昼弟,這個(gè)包可以讓開發(fā)者很方便地將日記寫入到文件啤它、數(shù)據(jù)庫或其他儲存介質(zhì)中。
- 在項(xiàng)目根目錄新建
composer.json
文件,寫入以下內(nèi)容
{
"require": {
"monolog/monolog": "1.2.*"
}
}
- 執(zhí)行
composer install
指令安裝包依賴
- 使用包進(jìn)行開發(fā)
composer已經(jīng)為我們下載了 monolog
包变骡,且生成了 autoload.php
自動(dòng)加載文件
新建 monolog.php
文件离赫,內(nèi)容如下:
<?php
require 'vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// create a log channel
$log = new Logger('name');
$log->pushHandler(new StreamHandler('monolog.log', Logger::WARNING));
// add records to the log
$log->warn('警告日志');
$log->err('錯(cuò)誤日志');
運(yùn)行腳本:
$ php monolog.php
生成了日志文件 monolog.log
[2018-07-12 14:18:14] name.WARNING: 警告日志 [] []
[2018-07-12 14:18:14] name.ERROR: 錯(cuò)誤日志 [] []
只需一個(gè)配置文件composer.json
,一行指令composer install
塌碌,代碼中引入autoload.php
渊胸,即可完美地使用第三方包。接下來分析composer的包管理規(guī)范
composer包管理規(guī)范
什么是包台妆?只要存在 composer.json
文件的代碼都可以稱之為一個(gè)包翎猛。
包名稱
包名稱由作者+項(xiàng)目名稱組成。有些包作者名與項(xiàng)目名是相同的接剩,如mustache/mustache
包名稱一定要加上作者切厘,避免沖突。如懊缺,同樣的是小龍女這個(gè)角色疫稿,不同人演繹的效果完全不同。如果你只是說你要看小龍女鹃两,可能給你的是一個(gè)陳妍希版本的小籠包遗座,而不是你一直仰慕的仙女劉亦菲。
那么俊扳,我們怎么根據(jù)一個(gè)包的項(xiàng)目名去獲取包的信息呢途蒋?以mustache
包為例:
- 在packagist查找
點(diǎn)擊進(jìn)入包信息詳情頁,可以看到包的安裝方法以及版本信息
除了在
composer.json
中寫包的安裝信息馋记,還可以通過composer require mustache/mustache
這種方式直接安裝
- 用
composer search
指令查找
查看包的具體信息 composer show mustache/mustache --all
包版本
在composer.json
中聲明安裝包時(shí)碎绎,需要指定包的版本,版本號的指定有多種格式:
- 確定的版本號
格式:1.0.2
最簡單的指定方式抗果,無歧義
- 在一定范圍的版本號
可以定義多個(gè)范圍筋帖,用逗號隔開,這將被視為一個(gè)邏輯AND處理冤馏。一個(gè)管道符號|將作為邏輯OR處理日麸。 AND 的優(yōu)先級高于 OR
>=1.0
: 大于或等于1.0版本
>=1.0,<2.0
: 大于或等于1.0,且小于2.0
>=1.0,<1.1|>=1.2
: 大于或等于1.0且等于1.1逮光,或者大于等于1.2
- 通配符
1.0.*
: 只要滿足以1.0開頭的版本號均可
-
~
下一個(gè)重要版本
~1.2 相當(dāng)于 >=1.2,<2.0
~1.2.3 相當(dāng)于 >=1.2.3,<1.3
-
^
大于指定的版本
以下用實(shí)例演示版本號的區(qū)別: