我們都知道 Laravel 擴展包的注冊會對應用造成消耗。有一些擴展包是開發(fā)環(huán)境中專用,生產(chǎn)環(huán)境中并不會使用到,為了避免無用的負載, 必須嚴格控制其安裝和加載。
安裝開發(fā)專用擴展包時 必須 使用 --dev
參數(shù),如:
composer require laracasts/generators --dev
這樣擴展包會被作為 require-dev
依賴標記在 composer.json 文件中。
Prodction 和 Staging 環(huán)境,必須 使用以下命令來安裝 Composer 依賴:
composer install --no-dev
所有 composer.json 里 require-dev
選項配置的依賴包都不會被安裝。
開發(fā)業(yè)務功能,需要用到某個擴展包,必須使用 composer require
將其加載至 composer.json 的 require
選項里。
以作者的一個經(jīng)歷來舉例:
某項目中,用到了 Laravel Admin 擴展包,現(xiàn)在要開發(fā)用戶頭像上傳功能,需要截圖,最好的選擇是 ?intervention/image
? 包,在 IDE 中的代碼提示中,發(fā)現(xiàn)可以使用 Image 類,就直接寫代碼,而不是檢查 composer.json 文件。等項目上線后,就會發(fā)現(xiàn)運行錯誤,Image 類找不到。
雖然 laravel-admin 包確實有加載 image 包,見 源碼:
"require-dev": {
"laravel/laravel": ">=5.5",
"fzaninotto/faker": "~1.4",
"intervention/image": "~2.3",
"laravel/browser-kit-testing": "^6.0"
},
但是加載的位置不對,使用的是 ?require-dev
?,也就是開發(fā)環(huán)境中加載,如果線上執(zhí)行 ?composer install --no-dev
? 的話,?intervention/image
? 包將不會被安裝。
最好的實踐就是,養(yǎng)成習慣,在使用第三方擴展包時,檢查下 composer.json 文件,如未顯示在 require
選項中,即使用 composer require xxx/xxx
命令進行加載。
更多建議: