現代高級編程語言,依賴管理工具是必不可少的。Java有Maven,Python有pip,Nodejs有npm, 而在composer出現以前,PHP只有被廣爲詬病的Pear, 因爲Pear實在太難用,不多PHP開發者用到這個工具。以至於PHP的開發生態很糟糕。php
連一個像樣的依賴管理工具都沒有,讓PHP這門佔據了web網站開發�主流市場的語言很尷尬。開發過程當中,要用到第三方的類庫,須要去下載zip包,而後解壓,放到相應的目錄,處理好命名空間,自動加載的問題,若是這個第三方包還有其餘依賴項,還要再次重複這個流程,看着隔壁家python和node.js一個命令行就搞定,顯得php開發人員的操做既原始又滑稽。node
這場面,比如:python
依賴管理工具大比拼web
所幸,金光閃閃的composer駕着七彩祥雲來了,PHP終於有了真正意義的依賴管理工具。能夠說,composer是現代PHP的基石。數據庫
composer解決了項目的依賴關係,且實現了自動加載。開發人員只須要幾個命令行,就能獲取其餘開發者的包,PHP開發工做所以變得如同堆積木,能夠根據業務的需求,快速方便地拆解組合代碼。npm
奇怪的是,即便compoer已經誕生好些年了,並且全部主流框架都支持composer,可居然還有很多PHP開發者不用這個工具。甚至還有人以爲composer加大了PHP的學習難度。編程
持有這種想法的人,就好像是一生都用紙筆手工記帳,有朝一日,給他配置了電腦,跟他演示了excel是如何地強大。他不爲新事物的強大感到震撼驚喜,而是蹙眉不滿地說:「這東西太難學了,我仍是習慣用紙筆」。json
對於持有這種想法的人,我只能兩手一攤。心態衰老的年輕人,若是他的心裏一直在裝睡,任誰也叫不醒。但時代的步伐可不會由於他們的拉後腿而中止前進,只會把他們遠遠甩在身後...composer
composer的安裝步驟,在composr中文社區有詳細的說明,點擊查看框架
安裝的流程很簡單,歸結爲如下幾步:
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" # 下載安裝腳本 - composer-setup.php - 到當前目錄 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://packagist.phpcomposer.com # 更換國內鏡像源
安裝完成後,查看composer版本
composer
接下來,咱們用composer來安裝第一個包
以monolog
包爲例,這個包可讓開發者很方便地將日記寫入到文件、數據庫或其餘儲存介質中。
composer.json
文件,寫入如下內容{ "require": { "monolog/monolog": "1.2.*" } }
composer install
指令安裝包依賴composer install
目錄結構
composer已經爲咱們下載了monolog
包,且生成了autoload.php
自動加載文件
新建monolog.php
文件,內容以下:
<?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('錯誤日誌');
運行腳本:
learnComposer php monolog.php
生成了日誌文件monolog.log
[2018-07-12 14:18:14] name.WARNING: 警告日誌 [] [] [2018-07-12 14:18:14] name.ERROR: 錯誤日誌 [] []
只需一個配置文件composer.json
,一行指令composer install
,代碼中引入autoload.php
,便可完美地使用第三方包。接下來分析composer的包管理規範
什麼是包?只要存在composer.json
文件的代碼均可以稱之爲一個包。
包名稱由做者+項目名稱組成。有些包做者名與項目名是相同的,如mustache/mustache
包名稱必定要加上做者,避免衝突。如,一樣的是小龍女這個角色,不一樣人演繹的效果徹底不一樣。若是你只是說你要看小龍女,可能給你的是一個陳妍希版本的小籠包,而不是你一直仰慕的仙女劉亦菲。
那麼,咱們怎麼根據一個包的項目名去獲取包的信息呢?以mustache
包爲例:
搜索包
點擊進入包信息詳情頁,能夠看到包的安裝方法以及版本信息
安裝包
除了在
composer.json
中寫包的安裝信息,還能夠經過composer require mustache/mustache
這種方式直接安裝
包信息
composer search
指令查找composer search
查看包的具體信息 composer show mustache/mustache --all
composer show