輕鬆發佈一個本身的composer擴展

咱們一直在使用別人發佈的擴展,是否想過本身發佈一個?php

今天就來聊聊如何發佈一個composer擴展及其注意事項。html

從composer.json開始

是的,既然咱們在使用一個composer擴展的時候根據一份composer.json來安裝依賴包,那麼咱們發佈擴展包的時候,也應該先有一份描述本身的清單 - composer.json。git

你可能會問,我如今開發的系統使用了composer來安裝依賴,我本身項目根目錄下也有一個composer.json,那個人項目是一個擴展包麼?github

是的,你的項目也是一個包,可是此刻它不能發佈、不能被別人經過composer安裝,由於它少了一個最重要的元素 ---- 名字json

就是咱們以前講的composer.json中的name,具體name的約定我想你已經經過以前的學習瞭解了吧,不懂能夠看看速查表傳送門yii2

若是你不知道拿什麼做爲供應商的名稱, 那麼使用你 github 上的用戶名一般是不錯的選擇。 雖然包名不區分大小寫,但慣例是使用小寫字母,並用連字符做爲單詞的分隔。composer

好比下面的寫法都是不錯的yii

  • abei2017/emoji
  • abei2017/yii2-emoji
  • china-go/emoji
  • china-go/yii2-emoji

爲了給使用者和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"
        }
    }
}複製代碼

簡要說明以下

  • 名字爲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

alt
alt

到這裏,你就成功的發佈了你的包,簡單吧。


相關文章
相關標籤/搜索