輕鬆釋出一個自己的composer擴充套件

阿北哥ya發表於2017-08-25

我們一直在使用別人釋出的擴充套件,是否想過自己釋出一個?

今天就來聊聊如何釋出一個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

alt
alt

到這裡,你就成功的釋出了你的包,簡單吧。


相關文章