文章寫於學習了超哥的教程 PHP 擴充套件包實戰教程 - 從入門到釋出 之後,一方面是想記錄下來PHP擴充套件包從建立到釋出的步驟,算是對學習的總結,也方便日後自己想寫其他的包時對整個過程能有個清晰的瞭解;另一方面,也是因為自己的語言組織能力、表達能力差,學了前面的六個課程,都沒寫過一篇總結的文章,有時候不記得某個知識點怎麼用了,但是知道教程裡介紹過,還得回頭去教程裡找一遍,所以想從此刻開始,嘗試去表達、總結和記錄下來學習的心得、感悟等。
在此特別感謝 Laravel China 這個平臺,我在這真的學到了很多東西。
課程學習程式碼分享:https://github.com/xkeyi/weather
包構建工具安裝即使用
安裝工具
$ composer global require 'overtrue/package-builder' --prefer-source
建立專案
$ package-builder build [目標目錄]
比如我們打算做一個擴充套件包叫 weather,目錄是當前目錄下, 然後會以互動問答形式要求輸入一些基本資訊。
$ package-builder build ./weather
# 然後按提示操作即可
# 包名:xkeyi/weather
# 名稱空間:Xkeyi\Weather
# 描述:A weather SDK
接下來我們需要在 composer.json 中宣告包自動載入的名稱空間,進入專案目錄,執行命令:composer dump-autoload
測試擴充套件包
擴招包程式碼寫好之後,需要先進行測試。
建立測試專案
在當前擴充套件包所在目錄檔案中建立一個空專案,如 weather-test
$ mkdir weather-test
$ cd weather-test
然後在這個測試專案的根目錄中使用 composer 引入我們的包
# 需要先初始化 composer.json,一路回車即可
$ composer init
# 配置包路徑,注意,這裡 `../weather` 為相對路徑,不要弄錯了
$ composer config repositories.weather path ../weather
# 安裝擴充套件包,注意,`xkeyi/weather` 為我們開發的擴招包的包名,即 vendor/packgist
$ composer require xkeyi/weather:dev-master
建立測試專案
擴充套件包安裝成功後,即可建立測試檔案來,如 index.php。
在測試檔案中,引入 composer 的擴充套件
<?php
require __DIR__ . '/vendor/antoload.php';
use Xkeyi\Weather\Weather;
.
.
.
執行測試檔案
$ php index.php
為 Laravel 整合最佳化
為了方便 Laravel 應用整合我們的擴充套件包,我們需要做一個 Laravel Service Provider
編寫 ServiceProvider
src/ServiceProvider.php
<?php
namespace Xkeyi\Weather;
class ServiceProvider extends \Illuminate\Support\ServiceProvider
{
// 標記著提供器是延遲載入的
protected $defer = true;
// 註冊服務提供者
public function register()
{
$this->app->singleton(Weather::class, function () {
return new Weather(config('service.weather.key'));
});
$this->app->alias(Weather::class, 'weather');
}
// 取得提供者提供的服務
public function provides()
{
return [Weather::class, 'weather'];
}
}
配置 Laravel Autoload Discovery
我們需要在 composer.json 中新增如下部分:
composer.json
.
.
.
"extra": {
"laravel": {
"providers": [
"Xkeyi\\Weather\\ServiceProvider"
]
}
}
這樣一來我們 Laravel 應用安裝後無需手動註冊服務提供器即可使用。
在 Laravel 專案中測試
先建立一個 Laravel 專案
$ composer create-project laravel/laravel laravel-weather-test
$ cd laraval-weather-test
# 配置包路徑,注意,這裡 `../weather` 為相對路徑,不要弄錯了
$ composer config repositories.weather path ../weather
# 安裝擴充套件包
$ composer require xkeyi/weather:dev-master
然後配置本機的 Homestead.yaml 和 hosts,並重啟 Homestead
$ vagrant provision && vagrant reload
編寫說明文件
一份友好的文件應該包含下面這些資訊:
- 專案簡介及創作動機
- 專案維護、CI、依賴更新狀態(如果有)
- features & 適用人群
- 執行的平臺或硬體要求
- 重要依賴
- 如何安裝與測試
- 使用示例及文件地址
- 貢獻指南
- License
- 鳴謝
- 其它特有的資訊
釋出上線
擴充套件包準備好之後,即可釋出上線。
建立程式碼倉庫
首先我們需要在 Github 建立倉庫。倉庫建立好之後,準備提交我們的程式碼,切換到包的根目錄,執行下面命令:
$ git init # 初始化 git 專案
$ git add -A # 新增全部檔案到 git
$ git commit -am "first commit" # 提交新增的檔案
$ git remote add origin git@github.com:xkeyi/weather.git # 設定遠端地址
$ git push -u origin master # 將提交推送到遠端倉庫
提交到 Packagist
使用 Github 賬號登入 Packagist。
登入之後,直接點選導航上的 Submit
,然後填入包的 Github 倉庫地址,點選 check
即可。
如果你的 Packagist 賬號是用 Github 賬號登入的,並關聯了兩個賬號,點選 check
後就完成了包的釋出,如果提示:
This package is not auto-updated. Please ...
意思是專案不會自動抓取更新,請參考超哥的教程 PHP 擴充套件包實戰教程 - 從入門到釋出;進行詳細配置。
包上線成功後,如果你的網路沒問題,過幾分鐘,應該就可以安裝開發版了:
沒有釋出正式版之前,只能安裝開發版,像下面這樣在包名後面加上 dev-master。
$ composer require xkeyi/weather:dev-master -vvv
釋出版本
測試期間你可以釋出 0.0.x 版本,小於 1 的版本在 Composer 中是有特殊處理的哦,這個要弄清楚。
本作品採用《CC 協議》,轉載必須註明作者和本文連結