使用 Composer 管理 PHP 套件 - daniel-qa/Laradock GitHub Wiki
http://blog.tonycube.com/2016/12/composer-php.html
進入 workspace,使用 laradock 的身分,進行安裝 composer 套件
docker-compose exec -u laradock workspace bash
使用 laradock 登入workspace容器(-u/--user)。
laradock 預設用於開發的使用者帳號,如果不加上這個選項,會使用最高管理權限登入(root)。
透過使用這個帳號登入,未來可能可以省去一些不必要的麻煩(ex:宿主機和虛擬機掛載目錄的權限問題)。
- 關於workspace容器
workspace是laradock連結各個容器的重要容器
- 測試 php 相關功能
php --version
composer --version
使用 Composer 管理套件
這裡示範如何安裝 monolog/monolog 套件。如果要順便練習,可以先建立一個空目錄,然後在其中做接下來的操作。
使用 require
在命令列切換到專案目錄下,輸入:
composer require monolog/monolog
指令執行完成後,在目錄下會出現 composer.json、composer.lock 兩個檔案及 vendor 目錄,安裝的套件會放在 vendor 目錄中。
因為 monolog/monolog 有用到 psr/log,所以你在 vender 目錄中會看到除 monolog 目錄之外,還同時多了 psr 目錄,這是套件提供者的目錄名稱,在它之內則會有以套件名稱為名的目錄。
psr/log 對 monolog/monolog 來說,就是一個相依套件,當你的套件越裝越多的時候,你也不用去煩惱如何管理,Composer 會幫你處理。
另外,在安裝訊息中,會出現一堆 suggests installing 的訊息,這是建議你去安裝這些它推薦的套件,這只是建議,有需要在下載即可。
註:如果你有使用 git ,記得把 vendor 目錄加入 .gitignore 中,套件不需要被 commit。只要有 composer.lock 或 composer.json 在執行以下介紹的指令就能下載相關的套件了。
使用 update
使用 install 當你的專案中已經有 composer.lock,可以直接執行
composer install
Composer 就會安裝 composer.lock 中指定的套件及版本。
關於 composer.json 檔
composer.json 是一個 json 資料格式的設定檔,提供資訊給 Composer,讓它知道要安裝什麼套件,及該套件的版本。 內容如下:
{
"require": {
"monolog/monolog": "^1.21"
}
}
關於 composer.lock 檔
composer.lock 會明確列出這個專案中用到的套件及它的版本,可以用來確保其他人使用到同一個版本號的套件。 composer.lock 這個檔案不可以手動建立,它會在執行 install 或 update 之後自動產生或更新。
何時用 install ? 何時用 update ?
composer install 指令會先去找 composer.lock,如果有,則依其中所指定的版本安裝,無論該套件是否有新版本;如果沒有,則會讀取 composer.json 來安裝,並且產生 composer.lock。
在沒有 composer.lock 檔的情況下,執行 composer install 的行為等同於 composer update 。
使用 composer update 指令,會去讀取 composer.json,並且安裝最新版本,同時更新 composer.lock。
這裡所謂的「安裝最新版本」是指 composer.json 檔中該套件所指定的版本上限-,如果你指定為固定版本,例如 1.0.0,那無論如何 update 都只會安裝該版本。
假如你有修改過 composer.json 當你執行 composer install 時,Composer 會提醒你 composer.lock 及 composer.json 不同步,要求你執行 composer update。
一般來說,只有當你確定要更新套件版本,或是第一次下載套件時,才用 update;如果你是從別人那裡拿到專案(例如github),而專案目錄中已經有 composer.lock,最安全的做法是使用 install,這樣可以確保安裝的套件版本和原專案的開發者使用的是同一個版本號。使用 update 的風險在於,你可能會安裝到最新的版本,而這有可能造成程式執行時因為不相容而發生錯誤。