Composer是一個很是流行的PHP包依賴管理工具,已經取代PEAR包管理器,對於PHP開發者來講掌握Composer是必須的.git
對於使用者來講Composer很是的簡單,經過簡單的一條命令將須要的代碼包下載到vendor目錄下,而後開發者就能夠引入包並使用了.
其中的關鍵在於你項目定義的composer.json,能夠定義項目須要依賴的包(可能有多個),而依賴的包可能又依賴其餘的包(這就是組件的好處),這些都不用你煩心,Composer會自動下載你須要的一切,一切在於composer.json的定義.github
Composer對於使用者來講是很透明,可是其背後的理念仍是須要了解一下的,其的誕生也不是偶然的,得益於Github的快速發展,PHP語言也愈來愈現代化,顯得更高大上了.json
爲了理解Composer,先大概瞭解下其結構:composer
Composer的結構工具
Composer命令行工具:
這個理解就比較簡單了,經過使用者定義的Composer.json去下載你須要的代碼,假如只是簡單的使用Composer,那麼掌握一些具體命令就徹底能夠了
Autoloading代碼加載器:
經過Composer,開發者能夠經過多種方式去使用,而其中的關鍵在於PHP的命名空間概念,以及PSR-4標準的發展,Composer只是根據這兩者開發了一個代碼自動加載器
Github:
有了Github,PHP開發人員能夠將開源的代碼託管在這上面,而Composer的發展源於Github,Composer本質上就是將Github上的代碼下載到本地.
Packagist:
對於使用者來講使用的是Composer的命令行工具,那麼命令行工具怎麼知道有多少包能夠被用戶使用呢,這主要就是依賴於Packagist,Packagist是Composer主要的一個包信息存儲庫,包開發者將具體代碼託管到Github上,將包信息提交到Packagist上,這樣使用者就能夠經過Composer去使用.
Composer根據本地定義的composer.json信息去查詢Packagist,Packagist根據Composer.json/Package.json信息解析,最終對應到github倉庫,Composer最終下載代碼的時候還要依賴於Github倉庫上的Composer.json,這裏涉及到三種類型的composer.json,含義是不同的.
Composer.json:
這是Composer的核心,是Composer的規則,上面也提到了三種類型的Composer.json,在使用的時候必定要注意區分,我初學的時候就老是搞亂.
Composer命令行工具命令行
composer init
使用者能夠在本身的項目下建立composer.json以便定義你項目的依賴包,也能夠經過composer init交互式的建立composer.json.開發
composer install
應該是最經常使用的命令,composer會根據本地的composer.json安裝包,將下載的包放入項目下的vendor目錄下,同時將安裝時候的包版本信息放入到composer.lock,以便鎖定版本.
其實在install的時候,假如發現composer.lock版本和目前vendor目錄下的代碼版本是一致的,則Composer會什麼也不作,composer.lock的目的就是讓你安心在目前這個版本下工做,而不獲取最新版本的包.it