建立 PHP 擴充套件包步驟 -- 課程學習分享

lianglunzhong發表於2018-12-05

文章寫於學習了超哥的教程 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 協議》,轉載必須註明作者和本文連結

相關文章