Devs.tw 是讓工程師寫筆記、網誌的平台。歡迎您隨手紀錄、寫作,方便日後搜尋!
公司內部多個專案需要同一個功能(例如部落格、CMS、管理面板之類的)
此功能重用性很高(假設它叫:ourpackage),希望能獨立開發成 laravel 套件,以 private 方式放在 bitbucket/github,然後要用它的多個專案可以直接透過 composer 安裝。甚至未來套件成熟之後,能夠輕鬆開源發佈到 Packagist,造福社群。該怎麼做?
先建立一個 laravel 專案(此專案不需要 git init,僅用來作為開發套件的環境)。此專案安裝 https://github.com/Jeroen-G/laravel-packager
輸入指令,快速建立基本的套件模板 code
artisan packager:new ourteam ourpackage
會生成套件資料夾 packages/ourteam/ourpackage
,這是之後會上傳到 bitbucket 或是 github 的資料夾,也是你打 git init 的地方。
套件預設的檔案結構幾乎什麼都沒有,視情況自行建立 controllers、routes、views 等資料夾與檔案(路徑與結構可自由決定)
接著開發套件內容,寫完之後 git commit 與 git push 到 bitbucket 或是 github 即可。
(再次強調,只有 packages/ourteam/ourpackage 內的程式碼會被 commit 進去,外面的 laravel 只是方便開發套件、讓套件運行的環境而已。)
要使用 ourpackage 的專案內,composer.json 跟一般 require 套件時的寫法一樣:
"ourteam/ourpackage": "dev-master"
(套件如果進行正式的版本管理,請以正確的版本號代替 dev-master)
composer 預設是去 https://packagist.org/ 尋找套件,目前自然是找不到 ourpackage。
composer.json 內用以下設定告訴它去哪找套件:
"repositories" : [
{
"type": "vcs",
"url": "[email protected]:ourteam/ourpackage.git"
}
],
(如果出現權限問題,便多一個步驟:在 config 內設定 bitbucket/github 的 access key。)
大功告成!
在開發套件的 laravel 環境內,寫完新的套件 code 之後,一樣將 packages/ourteam/ourpackage 內的程式碼 push 到 bitbucket 或 github 即可。
用到新版本套件的專案,則是執行 composer update ourteam/ourpackage
即可。
注意這種開發方式,在載入套件的幾個專案內,對套件不滿意時,不能直接進行修改。
需要回到原套件開發環境,更新並 push 後,再進行 composer update 才行。
有一些開發上的額外步驟成本,所以這種開發方式並不適用所有場景。
(想要直接進行修改的話,請參考附錄 refs 的文章教學)
只有當特定需求非常明確、並且肯定要在多個專案重複使用(或是有熱情要在未來發佈到 Packagist)時,採用這套流程才有效益。
話雖如此,我認為當團隊人數很多、專案內容很大時,這是一個非常值得參考的開發方法。
忘了在哪邊看過這樣一段話,跟大家分享:
The secret to building large apps is never build large apps.
Break your applications into small pieces.
Then, assemble those testable, bite-sized pieces into your big application.
(完)
refs:
開發套件時 除了直接用 psr-4 指定路徑之外
還可用 composer repository 設定的 'path' type 告訴 composer 這是一個本地套件
這樣就可以讀到套件本身的 composer.json 依賴
然後 使用套件的專案 可以在 post-install-cmd 與 post-update-cmd 內寫一些指令
自動跑 migrate 或是 publish 之類的