關於 composer install / composer update / composer require

Laravel 專案中,通常會用 compsoer 管理套件相依,常常會看到 composer.lock 和 composer.json 這兩個檔案,而標題所提的三個 composer 指令 (composer install / composer update / composer require) 也常常混淆,因此做個筆記記錄說明。

重點: composer.lock 是記錄實際上 vendor 裡安裝的版本,讓團隊裡每個人的開發環境即部署時線上的 server 保證安裝了一樣的套件相依。

A. composer install
1.若有 composer.lock 這個檔案,會去安裝此檔案內相依版本的套件。一般是要部署一個別人創立的專案時,要安裝vender用的。
2.若無 composer.lock ,則會去照 composer.json 安裝,並生成 composer.lock 。一般是在新創專案時的步驟,寫好 composer.json , 下 composer install ,這樣的case通常只有一次。

所以通常 composer.lock 都會加到git裡作版本控制。

B. composer require
添加 package 用。
composer require new/package
composer require “xxx/xxx:2.9.1”
會去添加安裝的版本,加入相依並紀錄到 composer.json 和 composer.lock

要幫專案增加 package 的時候用這個!

C. composer update
composer update 和 composer update vendor/package 會從 composer.json 安裝最新的 package,並且更新 composer.json 和 composer.lock

注意!有的 package 改版不向下相容,會讓原本預期的行為改變,團隊中如果有某人擅自更動套件的版本可能會導致災難,清楚知道自己在做什麼再用,也因為如此一般 composer.json 裡的相依版本不會用 dev。

參考資料:正確的 composer 擴展包安裝方法
https://laravel-china.org/topics/1901/correct-method-for-installing-composer-expansion-pack