2012年12月3日 星期一

Composer簡介

什麼是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解決的問題

  1. 你有一個project需要數個libraries.
  2. 在那些libraries當中, 有些需要依頼其他libraries.
  3. 你能自己定義你的project所依賴的libraries
  4. 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可以是:
  1. Exact version: 如1.0.2
  2. Range: 如>=1.0,<2.0
  3. Wildcard: 1.0.*
  4. 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