概述
如果多個項目中存在使用相同類庫、模塊的情況,此時可以考慮將類庫或者模塊單獨抽取出來,形成獨立類庫,通過composer
來進行依賴管理,這樣可以更方便維護,大大提升開發效率。
優勢
- 可以對特定模塊進行統一維護和升級
- 特定的類庫可由專人進行維護,保證穩定性和可靠性
- 避免了重復開發的情況
步驟
本地開發
為了方便調試,可先在本地現有項目中開發類庫,等到開發完成后,再將相關代碼單獨抽取出來。
- 首先在項目中創建一個存放類庫的目錄,如
packages/zacksleo/my-libs
,
其中packages
是類庫總目錄, zacksleo
是用戶名,相當于命名空間的第一級,my-libs
是類庫存放目錄。
- 在目錄中創建
composer.json
文件,并添加形如以下的內容:
{"name": "zacksleo/my-libs","description": "my libs","type": "library","license": "MIT","authors": [{"name": "zacksleo","email": "zacksleo@gmail.com"}],"minimum-stability": "stable","autoload": {"psr-4": {"zacksleo\\my\\libs\\": "src"}}
}
其中,name
是類庫名稱,descrption
是詳細說明,type
是類別,license
是使用的協議,authers
是作者信息,
minimum-stability
用來聲明最小依賴,通常有dev
和 stable
可選,autoload
中的psr-4
聲明了
命名空間和對應的目錄,注意命名空間就當使用雙反斜杠,目錄使用相對路徑,此外聲明了目錄為`src``目錄
-
在
src
目錄中添加相關代碼,其中的類使用命名空間zacksleo\\my\\libs
-
在項目的
composer.json
中,通過path
方式引入本地類庫,如可在repositories
中添加如下信息:
"repositories": {"my-libs": {"type": "path","url": "packages/zacksleo/my-libs"}}
其中my-libs
是別名,可任意填寫,type
設置成path
, url
為類庫所在的相對路徑(與composer.json文件相對)
- 通過
composer require
命令或者在composer.json
中的require
部分添加聲音,來實現依賴加載,如
composer require zacksleo/my-libs
在Github上創建庫并上傳代碼
當在本地開發完成后,可將類庫獨立抽取出來(此處的my-libs
目錄下的內容),并提交到Github上新建的倉庫中
配置packagist并發布
- 先在packagist.org中注冊好賬號,以便發布包。
- 在Github的倉庫中,點擊
settings
,找到Intergrations & services
, 點擊Add servies
, 選擇Packagist
,
填寫在packagist.org注冊的用戶名和Token(在Profile中找到Your API Token)
點擊確定添加,這樣,每次Github的變動,都會自動更新到packagist上,免去了手動更新的麻煩
本地依賴改成線上版本, 并清除開發代碼
類庫一經發布到packagist上后,就可將本地項目composer.json
添加的repositories
移除,重新運行composer install
,
來安裝packagist上的版本,同時packages
目錄亦可刪除。
版本問題說明
composer使用語義化的版本進行依賴管理,因此類庫在更新和發布時,所標記的版本號,也就當遵循語義化的版本規范。
基主要有以下幾個內容:
版本格式:主版本號.次版本號.修訂號,版本號遞增規則如下:
- 主版本號:當你做了不兼容的 API 修改,
- 次版本號:當你做了向下兼容的功能性新增,
- 修訂號:當你做了向下兼容的問題修正。
- 先行版本號及版本編譯信息可以加到“主版本號.次版本號.修訂號”的后面,作為延伸。
參考資料
- Composer中文文檔
- 語義化的版本規范