composer 是 PHP 的依賴管理工具,本篇文章就來說明如何構建一個包,並提交到 Packagist ,這樣別人就可以方便地通過 composer 使用你的包了。
開發 composer 包有以下幾個步驟:
初始化 composer.json 檔案
定義命名空間及包名
實現包需要實現的功能
提交到 GitHub
在 Packagist 註冊包
初始化 composer.json 檔案
安裝好 composer 後即可在本地運行 composer init 通過互動式命令列設定 composer.json 。
下面介紹其中的幾個屬性,以及常規的設定:
name
此屬性定義包名,以 / 隔開,前面的為供應商名字,後面為包名,供應商代表 Packagist 網站為開發人員提供的唯一的名字,用來組織包以及防止命名衝突。所以提交時最好先訪問 https://packagist.org/packages/yourvendorname 將 url 中的 yourvendorname 替換為你想要取的名字,如果頁面沒有 404 ,說明已經被註冊了。
license
許可證。關於許可證,建議看兩篇文章,開源項目 license 介紹 、 如何選擇 license
require
安裝當前包所需的依賴。只有所有依賴被安裝當前包才會被安裝。
autoload
此配置下主要是 PSR-4 或者 PSR-0 設定,更推薦使用 PSR-4 標準。
http://json-schema.org/ 上介紹了 JSON Schema 的定義以及各個語言對其各種功能的實現,有 validator 的實現,其中 JSON Schema Validator 是線上的驗證服務。其實最簡單的就是使用 composer validate composer.json 來驗證檔案是否是有錯誤。
項目結構
項目結構是典型的 MVC 結構,
.└── geo └── geosso ├── LICENSE ├── README.md ├── composer.json └── src ├── Contracts ├── Http │ ├── Controllers │ ├── Middleware │ └── Requests ├── ParamsBean ├── Providers ├── Support └── config12 directories
LICENSE、README.md 及 composer.json 是運行 tree -d 之後手工添加上去的。
項目根目錄定義在 src 下,在 composer.json 中也有定義,這樣當 composer 載入這個包時就知道如何通過命名空間去解析檔案路徑。
Http 目錄代表請求響應,之下的 Controllers 表示合法請求的控制器,Middleware 代表請求的第一道關卡,通過中介軟體去攔截請求,Requests 去擷取前端請求並對請求過濾。
Contracts 代表介面定義。ParamsBean 代表應用程式層與底層服務溝通時的參數封裝,通過 Bean 去擷取各個參數,而不是傳遞 array 使得調用一致,並且強制介面調用時做類型檢測,可以很大程度上統一各層之間的參數傳遞。
Providers 代表 Laravel 的服務容器,通過服務容器,可以註冊路由與配置,載入助手類,綁定介面與其實現。
Support 就是一些助手類,對常用的與邏輯無關的功能的封裝,config 代表應用自己的配置,通過 config 可以方便地將配置設定並使用全域函數 config() 調用。
提交至 GitHub
按照前面的步驟,一個包就有了基本的骨架,接下來就是上傳至 GitHub ,設定項目,整合持續整合服務,發布開源項目許可證。
GitHub 初始化項目時可以選擇產生 .gitignore 檔案,選擇許可證,初始化 README.md 檔案,切換至本地的項目目錄後,按如下步驟即可將目錄上傳至 GitHub:
git init # 初始化倉庫git remote set-url origin --push --add git@github.com:jayxhj/geosso.git # 添加遠程追蹤倉庫地址git add .git commitgit push origin master
提交至 Packagist
Packagist 為 composer 預設擷取包中繼資料資訊的地址,從 Packagist 擷取到中繼資料資訊後,再從 GitHub 上拉取代碼。因此,當把你開發的包上傳至 GitHub 後還需要將其在 Packagist 註冊,這樣全世界的人都能通過 composer 去拉去你的代碼了。