尤川豪   ·  9月前
Exp. 2,048  ·  261 貼文  ·  201 留言

開發 Laravel 獨立套件,透過 Composer 發佈到公司內部重複使用

應用情境

公司內部多個專案需要同一個功能(例如部落格、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":  "git@bitbucket.org: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:

  分享   共 1,853 次點閱
共有 1 則留言
尤川豪   ·  9月前
Exp. 2,048  ·  261 貼文  ·  201 留言

開發套件時 除了直接用 psr-4 指定路徑之外

還可用 composer repository 設定的 'path' type 告訴 composer 這是一個本地套件

這樣就可以讀到套件本身的 composer.json 依賴

然後 使用套件的專案 可以在 post-install-cmd 與 post-update-cmd 內寫一些指令

自動跑 migrate 或是 publish 之類的

 
您的留言
  贊助本站開發,解鎖進階教材
尤川豪
Exp. 2,048  ·  261 貼文  ·  201 留言

關於作者

Devs.tw 作者,喜歡分享&建造新東西的工程師。

歡迎在 Facebook 追蹤我!不定期分享有趣技術文章!

  查看個人檔案