原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/
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 來驗證文件是否是有錯誤。
這是我演示的設置 composer.json 的視頻
項目結構
以我開發的 單點登錄 SDK 為例,此項目基於 Laravel ,實現了站點接入單點登錄系統的簡單接入,應用只需在服務端注冊並實現指定接口,即可接入 SSO 。
項目結構是典型的 MVC 結構,
1 |
.
└── geo
└── geosso
├── LICENSE
├── README.md
├── composer.json
└── src
├── Contracts
├── Http
│ ├── Controllers
│ ├── Middleware
│ └── Requests
├── ParamsBean
├── Providers
├── Support
└── config
12 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:
1 |
>git init # 初始化倉庫 |
提交至 Packagist
Packagist 為 composer 默認獲取包元數據信息的地址,從 Packagist 獲取到元數據信息后,再從 GitHub 上拉取代碼。因此,當把你開發的包上傳至 GitHub 后還需要將其在 Packagist 注冊,這樣全世界的人都能通過 composer 去拉去你的代碼了。
提交至 Packagist 只需三個步驟:
- 注冊帳號
- 在 https://packagist.org/packages/submit 提交開發包
- 設置 webhook 以便提交包更新后能及時地同步至 Packagist
自此,一個基本的包開發就結束了。通過 composer 來管理 PHP 的依賴,通過編寫 composer package 去擴展自己的類庫,通過引入其他的類庫來填充自己的功能,就不用重復造輪子了。
