後端套件管理
Composer、Packagist
Last updated
Composer、Packagist
Last updated
站在巨人的肩膀上, 運用他人已開發的元件,不要重複製造輪子的套件使用觀念,一直是自由軟體與軟體工程追尋的目標,以下我們在 Windows 的環境中說明如何使用 PHP 套件管理工具。 本文件僅就套件的使用進行說明,套件的設計不在本文件說明範疇內。
composer 是 PHP 的套件管理工具,而且是以專案為管理單位,讓我們可以直接使用其他高手設計好的元件,可以說是 PHP 的火力支援庫,例如以下這些好用且重要的套件: tracy、carbon、monolog、fpdf 等。
首先請至官網下載並執行 Composer-Setup.exe,裝好後會同時設定路徑 path ,讓我們在命令列中的任何目錄都可以使用 composer,過程中會詢問我們 PHP CLI 執行檔的位置,請參考下圖指定您實際的路徑(最好與 HTTP 運作的版本相同)。
最低運作要求:版本>=PHP 5.3.2(openssl)、Git
透過 php -m 可得知有哪些 extension 被載入,務必包含 openssl
上述安裝完成後,會在環境變數 PATH 中加入 composer 與 php 的路徑,此時請打開命令提示字元輸入
若要查詢 PHP CLI 的真實路徑,可下達指令 php -r "echo PHP_BINARY;"
要升級 composer 的版本,請下達指令如下:
以往 PHP 的套件散落在許多不同的網頁,沒有集中存放的儲存庫,因此引用的開發者要更新或查詢都不容易, Packagist 儲存庫彙集了許多可運用 composer 安裝的套件,並透過網頁的方式,查詢下載次數、推薦次數、版本號碼、授權方式、原始碼位置等資訊,因此套件設計者可只要依照規範重構自己的套件後,再將資訊放上去,之後開發者便可先在 Packagist 上查詢喜歡的套件,然後使用 composer 指令來進行安裝與更新該套件。
首先我們參考下圖在 Packagist 的搜尋欄位輸入關鍵字 tracy,可得知 tracy 是一套針對 PHP 程式碼除錯使用的套件,搜尋欄位可搜尋套件名稱與套件說明。
點選 tracy/tracy 之後會來到套件專屬頁面,在此我們會看到一些重要資訊,像是此套件必須運作在 PHP版本5.4.4以上,套件原始碼/官網的位置,推薦的星星數,最重要的是上方提示的安裝指令。
tracy/tracy 的斜線二邊分別代表組織名稱與專案名稱,組織名稱通常代表是公司或個人,composer 安裝套件時必須以 [組織名稱]/[套件名稱] 來指定,是為了防止套件命名衝突。
接下來請開啟命令提示字元,並切換到專案目錄之後,下達指令如下
上述指令下達之後,composer 會至作者指定之原始碼位置開始下載原始碼與相依套件,然後在專案目錄中產生 2 個檔案( composer.json, composer.lock) 與 1 個目錄(vendor),下載的套件就是放在 vendor 目錄中
composer.json 是一個 json 資料格式的設定檔,可讓開發者指定本專案使用的套件與版本範圍,方便 composer 進行相依參考。
composer.lock 開發者無須設定它,本檔案存放了套件本身與其相依套件的實際下載位址,以及相關資訊,它會在執行 install 或 update 之後自動產生或更新。
vendor目錄存放所有下載之後的套件,其中的 autoload.php 提供所有使用套件的 php require之用。
在想要引用套件的 PHP 頁面,加入以下敘述
__DIR__ 代表目前PHP檔案所在的目錄,是 PHP 少數幾個魔術常數(Magic constant)之一
只要引用上述檔案,就可以載入套件中所有對外公開的類別。基本上每個套件都會定義自己的 autoload 規則,在安裝時,composer 會把這些規則加入,這樣透過 autoload.php 就可以直接使用所有已安裝的類別。
若要進行套件更新,請在專案的命令提示字元輸入
上述指令會根據 composer.json 的內容,下載或更新指定的套件及版本,並在完成後自動產生 composer.lock。
若從遠端版本庫下載專案,例如: github ,或是專案目錄中存在有開發者定義的 composer.lock,但沒有相關套件,可執行下列指令,確保安裝的套件版本和原專案的開發者使用的是同一個版本號。
同步遠端專案時不建議使用 composer update 的原因,在於可能會安裝到最新的版本,造成程式執行時因為版本不相容而導致錯誤。
composer install 指令會先去找是否有 composer.lock,如果有此檔,則依其中所指定的版本安裝,無論該套件是否有新版本;如果找不到,則會讀取 composer.json 來安裝,並且產生 composer.lock,所以目的是要同步遠端的專案檔時,建議使用 composer install 因為會參考現有的 composer.lock 進行套件安裝。
composer update 指令則會讀取 composer.json,並參考其中的版本範圍設定,更新到對應的最新套件版本,同時更新 composer.lock。
在沒有 composer.lock 檔的情況下,執行 composer install 的行為等同於 composer update 。
本範例假設使用架站機 Uniform Server ,專案目錄在 D:\UniServerZ\www, 以下我們舉幾個透過 composer 使用套件的例子。