我們一直在使用別人釋出的擴充套件,是否想過自己釋出一個?
今天就來聊聊如何釋出一個composer擴充套件及其注意事項。
從composer.json開始
是的,既然我們在使用一個composer擴充套件的時候根據一份composer.json來安裝依賴包,那麼我們釋出擴充套件包的時候,也應該先有一份描述自己的清單 - composer.json。
你可能會問,我現在開發的系統使用了composer來安裝依賴,我自己專案根目錄下也有一個composer.json,那我的專案是一個擴充套件包麼?
是的,你的專案也是一個包,但是此刻它不能釋出、不能被別人通過composer安裝,因為它少了一個最重要的元素 ---- 名字。
就是我們之前講的composer.json中的name,具體name的約定我想你已經通過之前的學習瞭解了吧,不懂可以看看速查表傳送門
如果你不知道拿什麼作為供應商的名稱, 那麼使用你 github 上的使用者名稱通常是不錯的選擇。 雖然包名不區分大小寫,但慣例是使用小寫字母,並用連字元作為單詞的分隔。
比如下面的寫法都是不錯的
- abei2017/emoji
- abei2017/yii2-emoji
- china-go/emoji
- china-go/yii2-emoji
為了給使用者和composer提供更多的東西,你應該保證你的包有足夠準確的說明和限制,具體composer.json各項說明大家可以參考之前的幾篇文章
當然,composer也為我們提供了 init 命令,一問一答式的幫我們建立composer.json,這樣更簡單。
程式碼結構和自動載入方式
先說結構吧,一個包是應該有測試文件、有原始碼、有說明文件,甚至還要有一些例子,所以將一堆檔案放到一個資料夾並不是好的結構,我一般喜歡如下的寫法,不過這不侷限,思路可以理清楚就是好的結構。
我的結構如下
-src/
--src/Emoji.php
--src/Event.php
--src/....
-test/
--test/a.php
--test/b.php
--test/...
-example/
--example/example01.php
--example/example02.php
--example/...
-README.md
-composer.json複製程式碼
而關於自動載入方式,如果是一個新的擴充套件,我喜歡也推薦用psr-4規範。
那就需要在composer.json有如下定義
"autoload": {
"psr-4": {
"abei2017\\emoji\\": "src"
}
}複製程式碼
具體psr-4的規範可以去官網看一下,composer安裝了你的擴充套件後,對映關係會出現在 vendor\composer\autoload_psr4.php 檔案內容中。
我在此處把abei2017/yii2-emoji的composer.json說明下,幫助大家理解。
{
"name": "abei2017/yii2-emoji",
"description": "一個yii2的emoji擴充套件",
"type": "yii2-extension",
"keywords": ["yii2","extension"],
"license": "MIT",
"authors": [
{
"name": "abei",
"email": "abei@nai8.me"
}
],
"require": {
"yiisoft/yii2": "*",
"emojione/emojione": "^3.1"
},
"autoload": {
"psr-4": {
"abei2017\\emoji\\": "src"
}
}
}複製程式碼
簡要說明如下
- 名字為abei2017/yii2-emoji,abei2017是我github的名字
- 採用MIT協議釋出
- yii2-emoji能執行要依賴於 yiisoft/yii2 和 emojione/emojione 的正確部署,見require
- 自動載入採用psr-4,名稱空間和擴充套件的src下檔案一一對映
提交到github
然後在github上建立一個空的倉庫,記住倉庫git地址。回到我們機器上的擴充套件目錄,執行git操作。
>git init
>git remote set-url origin --push --add git@github.com:abei2017/xxx.git
> git add .
> git commit
> git push origin master複製程式碼
當然你如果使用phpstorm,這一切會更簡單。傳送門
總之,你現在將本地檔案git到了遠端的倉庫。
coding...coding...coding
經過無數個夜晚,你完成了擴充套件的功能。
然後我們在github上為它建立了一個版本,叫做1.0
提交給Packagist
大家都知道,Packagist(packagist.org/)是composer的…
註冊賬號
首先我們要在Packagist上註冊一個賬號,過程十分簡單,這年頭誰還沒註冊過呀。
submit
然後點選右上角的submit(packagist.org/packages/su… ) 提交即可。Packagist能自動識別git/svn,你只需要提交github的倉庫地址。
一會兒,Packagist就完成了自己的分析和採集,你就可以通過 composer require xxx 使用了。國內映象使用者要慢些,映象要每隔一點時間採集一次Packagist上的包。
升級你的包
過了一段時間,你的包有了新版本,可能在github上新建了2.0版本,這兒時候回到你在 Packagist 上的此包頁面,點選下update即可,當然你也可以通過GitHub Service Hook實現自動update
到這裡,你就成功的釋出了你的包,簡單吧。