咱們一直在使用別人發佈的擴展,是否想過本身發佈一個?php
今天就來聊聊如何發佈一個composer擴展及其注意事項。html
是的,既然咱們在使用一個composer擴展的時候根據一份composer.json來安裝依賴包,那麼咱們發佈擴展包的時候,也應該先有一份描述本身的清單 - composer.json。git
你可能會問,我如今開發的系統使用了composer來安裝依賴,我本身項目根目錄下也有一個composer.json,那個人項目是一個擴展包麼?github
是的,你的項目也是一個包,可是此刻它不能發佈、不能被別人經過composer安裝,由於它少了一個最重要的元素 ---- 名字。json
就是咱們以前講的composer.json中的name,具體name的約定我想你已經經過以前的學習瞭解了吧,不懂能夠看看速查表傳送門yii2
若是你不知道拿什麼做爲供應商的名稱, 那麼使用你 github 上的用戶名一般是不錯的選擇。 雖然包名不區分大小寫,但慣例是使用小寫字母,並用連字符做爲單詞的分隔。composer
好比下面的寫法都是不錯的yii
爲了給使用者和composer提供更多的東西,你應該保證你的包有足夠準確的說明和限制,具體composer.json各項說明你們能夠參考以前的幾篇文章phpstorm
固然,composer也爲咱們提供了 init 命令,一問一答式的幫咱們創建composer.json,這樣更簡單。ide
先說結構吧,一個包是應該有測試文檔、有源代碼、有說明文檔,甚至還要有一些例子,因此將一堆文件放到一個文件夾並非好的結構,我通常喜歡以下的寫法,不過這不侷限,思路能夠理清楚就是好的結構。
個人結構以下
-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"
}
}
}複製代碼
簡要說明以下
而後在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.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
到這裏,你就成功的發佈了你的包,簡單吧。