人人為我,我為人人!向社群釋出自己的 Composer 包

老財發表於2017-02-19

PHP專案,大多遇到過以下問題

  • 找到了一個類,需要把這個類引入專案,放在哪個目錄?
  • 怎麼autoload?
  • 它有沒有依賴什麼擴充套件?
  • 它會不會需要使用比現在更高版本的PHP上?

如果被戳中,請抽一點時間,服下Composer 這味解藥 Composer詳細介紹

Composer可以輕鬆管理這些相互依賴的包,Composer的出現無疑是為了讓所有的從事PHP開發的程式猿勁往一處使,增加複用,實現像搭樂高積木一樣程式設計,不必重複發明輪子,能夠將開發社群塑造得更加生態化。
本人就經常使用composer命令為Laravel專案新增各種擴充套件,非常方便!

人人為我,我為人人!
同理,自己寫的程式碼一樣可以貢獻給社群,這樣別人就可以方便地通過 Composer 使用你的包,本教程介紹一下發布自己包的具體步驟:

首先,Packagist 官網是Composer包的資源庫,所有已經發布的包都能在其中查詢到,我們即將釋出的包也會提交到上面, Packagist 獲取到後設資料資訊後,具體程式碼會從包原始碼所在的 GitHub 上拉取,因此需要準備:

  1. 建立github.com帳號
  2. 建立github.com工程
  3. 建立packagist.org帳號

此處假定GitHub工程已經初始化完成,新手GitHub相關知識自行補足 GitHub詳細介紹

準備就緒,進入專案目錄(本教程釋出的是一款雲印表機的SDK)

1、初始化專案,生成Composer包描述檔案

本例程式碼,目錄結構:
file
將類檔案放在src目錄下
初始化一個Composer包描述檔案composer.json,在工程根目錄執行命令:

composer init

會出現如下向導提示:


Package name (/) [kelaocai/yprint]: baocai/yprint
Description []: Elind Printer SDK
Author [kelaocai , n to skip]: 
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: sdk
License []: MIT

重要的幾個填寫項:

  • Package name(重要):包名,一般是公司名+"/"+包名 比如 baocai/yprint
  • Minimum Stability:通常預設填寫dev,因為第一次程式碼Push完,是在dev-master分支上,dev也就是最小穩定版本標識號
  • Package Type:根據庫類別填寫,sdk,lib,都可以
  • License:版權,預設填寫 MIT
    接下來填寫自身庫需要的依賴,預設填no,後續可以在composer.json中補充修改
    
    Would you like to define your dependencies (require) interactively [yes]? no
    Would you like to define your dev dependencies (require-dev) interactively [yes]? no
    

一路回車,工程目錄中已經生成好composer.json
在composer.json中增加自動載入配置,這裡主要是對名稱空間和原生程式碼目錄之間的對映
類名稱空間 為 BaoCai\Yprint,對應配置:


"autoload": {
    "psr-4": {
      "BaoCai\\": "src/"
    }
  }

完整的配置檔案:


{
  "name": "baocai/yprint",
  "description": "Elind Printer SDK",
  "type": "sdk",
  "license": "MIT",
  "authors": [
    {
      "name": "kelaocai",
      "email": "kelaocai@163.com"
    }
  ],
  "minimum-stability": "dev",
  "require": {},
  "autoload": {
    "psr-4": {
      "BaoCai\\Yprint\\": "src/"
    }
  }
}

2、提交GitHub工程

將第一步中生成的專案檔案,提交到GitHub

git add .
git commit -m 'composer init'
git push

確認提交成功後進行下一步

3、向Packagist提交包

訪問Pakcagist官網,登入後,點選右上角Submit按鈕,進入釋出嚮導
file
此處填寫GitHub工程地址
file
GitHub地址:注意是https開頭的訪問連結
file
如果找到,會提示 The package name found for your repository is: baocai/yprint, press Submit to confirm.
點選Submit提交按鈕建立
一切順利,可以看到釋出成功頁
file

4、設定GitHub程式碼自動同步

一旦在Pakagist上釋出了包,之後的版本更新和程式碼同步,有一個機制來保證,就是GitHub中的事件通知服務,用於程式碼遞交時觸發一個事件,將程式碼同步到其他環境中。
file
新增服務,服務列表中選擇 Packagist,進入嚮導
主要填寫兩項Packagist配置資訊:

  • 使用者名稱: 注意是Packagist上的使用者名稱
  • Token: 通訊令牌
  • Domain: 可不用填寫

其中 Token需要到Packagist的個人設定裡面去獲取 跳轉檢視
file

填寫完畢,提交後,記得測試一次,完成首次同步,
file
如果成功會提示以下資訊:

Okay, the test payload is on its way.

回到Packagist,重新整理,應該沒有再出現 (Not Auto-Updated) 的提示,說明同步機制已經生效,之後每次GitHub變化,會自動通知並同步。

5、驗證包安裝

以上步驟完成,就可以驗證一下包是否能從庫中查詢到,並且驗證是否能夠安裝
!特別注意,因為剛提交,還沒有設定版本,此時版本預設是dev-master,如果直接require包名,會提示找不到對應版本,這裡如果不知道,會很坑,務必加上版本指定,這裡是:dev-master

composer require baocai/yprint dev-master

  • Installing baocai/yprint (dev-master 729feee) Cloning 729feee5d4 from cache

看到成功安裝提示,順利完成釋出!

6、設定版本

版本預設是dev-master,Composer包的版本號會從Git的tag中同步過來,因此先設定專案程式碼的tag,回到專案目錄

git tag 1.0.0
git push --tag

重新整理Pakagist專案頁,已經同步好版本:
file
再次安裝驗證,已經可以不用顯式指定版本號,自動安裝最新版本

composer require baocai/yprint

如果用composer命令的庫指向的是國內全量映象,需要稍等一下伺服器同步,剛開始,可能會報找不到安裝包的錯誤,如果一切正常,會看到版本提示,安裝成功!

composer require baocai/yprint
Using version ^1.0 for baocai/yprint

相關文章