什麼是Composer?
Composer是一個PHP的"dependency management"工具, 它能讓你指定你的Project裡需要用到的"dependent libraries", 並安娤這些libraries到你的project裡.
Dependency management
Composer不是"package manager", 雖然它是處理packages, 但它是在project的層面上管理, 通常是在project的根目錄下建立一個叫vendor的directory, 然後把packages安裝到這個directory裡. 一般情況下它不會安裝global的packages.
Composer解決的問題
- 你有一個project需要數個libraries.
- 在那些libraries當中, 有些需要依頼其他libraries.
- 你能自己定義你的project所依賴的libraries
- Composer找出所需安裝的packages及versions, 並安裝(事實上是下載)到project的vendor目錄
安裝
要安裝Composer, 在你的project的根目錄下執行
$ curl -s https://getcomposer.org/installer | php
以上指令會先檢查PHP的設定然後下載composer.phar到你的目錄下.
要執行composer, 執行
php composer.phar
如果你想直接以composer執行, 可以把composer.phar 複制到/usr/local/bin中
$ sudo mv composer.phar /usr/local/bin/composer
定義dependencies
例如你需要在你的project裡用monolog, 先建立composer.json, 內容為
{
"require": {
"monolog/monolog": "1.2.*"
}
}
require傳入的物件格式為{ "vendor name/package name" : "version" }
version可以是:
- Exact version: 如1.0.2
- Range: 如>=1.0,<2.0
- Wildcard: 1.0.*
- Next Significant Release: 如 ~1.2(相當於>=1.2,<2.0)
使用
執行以下指定, Composer會自動安裝你所定義的dependencies
$ php composer.phar install
composer.lock及composer.json
Composer執行install後會把安裝過的packages寫入composer.lock中, 而Composer每次執行install時會先確認composer.lock是否存在, 如果存在則安裝composer.lock中的packages, 不會理會composer.json, 如不存在則以composer.json裡的packages內容建立composer.lock. 所以執行install不會自動升級packages, 要升級需執行
$php composer.phar update