PHP專案,大多遇到過以下問題
- 找到了一個類,需要把這個類引入專案,放在哪個目錄?
- 怎麼autoload?
- 它有沒有依賴什麼擴充套件?
- 它會不會需要使用比現在更高版本的PHP上?
如果被戳中,請抽一點時間,服下Composer 這味解藥 Composer詳細介紹 。
Composer可以輕鬆管理這些相互依賴的包,Composer的出現無疑是為了讓所有的從事PHP開發的程式猿勁往一處使,增加複用,實現像搭樂高積木一樣程式設計,不必重複發明輪子,能夠將開發社群塑造得更加生態化。
本人就經常使用composer命令為Laravel專案新增各種擴充套件,非常方便!
人人為我,我為人人!
同理,自己寫的程式碼一樣可以貢獻給社群,這樣別人就可以方便地透過 Composer 使用你的包,本教程介紹一下發布自己包的具體步驟:
首先,Packagist 官網是Composer包的資源庫,所有已經發布的包都能在其中查詢到,我們即將釋出的包也會提交到上面, Packagist 獲取到後設資料資訊後,具體程式碼會從包原始碼所在的 GitHub 上拉取,因此需要準備:
- 建立github.com帳號
- 建立github.com工程
- 建立packagist.org帳號
此處假定GitHub工程已經初始化完成,新手GitHub相關知識自行補足 GitHub詳細介紹
準備就緒,進入專案目錄(本教程釋出的是一款雲印表機的SDK)
1、初始化專案,生成Composer包描述檔案
本例程式碼,目錄結構:
將類檔案放在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按鈕,進入釋出嚮導
此處填寫GitHub工程地址
GitHub地址:注意是https開頭的訪問連結
如果找到,會提示 The package name found for your repository is: baocai/yprint, press Submit to confirm.
點選Submit提交按鈕建立
一切順利,可以看到釋出成功頁
4、設定GitHub程式碼自動同步
一旦在Pakagist上釋出了包,之後的版本更新和程式碼同步,有一個機制來保證,就是GitHub中的事件通知服務,用於程式碼遞交時觸發一個事件,將程式碼同步到其他環境中。
新增服務,服務列表中選擇 Packagist,進入嚮導
主要填寫兩項Packagist配置資訊:
- 使用者名稱: 注意是Packagist上的使用者名稱
- Token: 通訊令牌
- Domain: 可不用填寫
其中 Token需要到Packagist的個人設定裡面去獲取 跳轉檢視
填寫完畢,提交後,記得測試一次,完成首次同步,
如果成功會提示以下資訊:
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專案頁,已經同步好版本:
再次安裝驗證,已經可以不用顯式指定版本號,自動安裝最新版本
composer require baocai/yprint
如果用composer命令的庫指向的是國內全量映象,需要稍等一下伺服器同步,剛開始,可能會報找不到安裝包的錯誤,如果一切正常,會看到版本提示,安裝成功!
composer require baocai/yprint
Using version ^1.0 for baocai/yprint
本作品採用《CC 協議》,轉載必須註明作者和本文連結