學習擴張包的開發到釋出

Everan發表於2020-04-11

前言

之前看了超哥的教程,從頭到尾跟著做了一遍,當時也沒弄懂個所以然,就擱置了。時間一久,就全部都給忘完了。今天休息,就想著鞏固下在 laravel 裡開發擴充套件包和到最後的釋出。這裡就當做個筆記,也因為部落格裡一篇文章都沒有,覺得甚是尷尬啊!:bowtie: 廢話不多說,我們要開始了。

目的

完成一個無限分類的小擴充套件包

安裝 laravel

composer create-project --prefer-dist laravel/laravel pkg

也可以在已有的專案進行開發,如果這樣則忽略安裝這一步。

新建目錄

接著進入此專案中,建立目錄 packages/{your_name}/{your_package_name}

mkdir -p packages/everan/unlimitedclassified

然後再進入擴充套件包目錄,進行 composer 初始化:

cd packages/everan/unlimitedclassified
composer init

按著提示來輸入資訊,得到的 comoposer 內容大概如下:

{
    "name": "everan/unlimitedclassified",
    "description": "This is a unlimited classified",
    "license": "MIT",
    "authors": [
        {
            "name": "Everan",
            "email": "everan@aliyun.com"
        }
    ],
    "require": {},
}

此時擴張包目錄大致如下:

everan/unlimitedclassified
                ├── src  # 邏輯程式碼資料夾
                ├── tests # 測試用例資料夾
                ├── README.md
                ├── composer.json

修改 composer 配置

packages/everan/unlimitedclassified/composer.json

{
    ·
    ·
    ·
    "autoload": {
        "psr-4": {
            "Lejin\\UnlimitedClassified\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Lejin\\UnlimitedClassified\\Tests\\": "tests/"
        }
    },
    ·
    ·
    ·
}

編寫擴張包業務邏輯程式碼

<?php

namespace Everan\UnlimitedClassified;

class UnlimitedClassified
{
    public function getUnlimitedClassified($data, $parent_key, $child_key)
    {
        $data = array_column($data, null, 'id');
        $tree = [];
        foreach ($data as $key => $val) {
            if ($val[$parent_key] == 0) {
                $tree[] = &$data[$key];
            } else {
                $data[$val[$parent_key]][$child_key][] = &$data[$key];
            }
        }
        return $tree;
    }
}

編寫服務類

<?php

namespace Everan\UnlimitedClassified;

use Illuminate\Support\ServiceProvider;

class UnlimitedClassifiedServiceProvider extends ServiceProvider
{
    public function boot()
    {
        //
    }

    public function register()
    {
        $this->app->singleton('unlimited_classified', function () {
            return new UnlimitedClassified();
        });
    }
}

到這裡擴張包就基本算開發好了,接下來我們開始進行本地安裝和測試。

本地測試

手動把服務類 UnlimitedClassifiedServiceProvider 新增到專案的 config/app.php providers 陣列中:

'providers' => [
    ·
    ·
    ·
    \Everan\UnlimitedClassified\UnlimitedClassifiedServiceProvider::class,
],

接著修改根目錄裡的 composer 的配置
pkg/composer.json

"autoload": {
        ·
        ·
        "psr-4": {
            ·
            ·
            "Everan\\UnlimitedClassified\\": "packages/everan/unlimitedclassified/src/"
        }
    },

最後在根目錄執行命令:

composer dump-autoload

測試

根目錄執行:

php artisan tinker

接在輸入程式碼:

$data = [
    ['id'=>1,'pid'=>0,'name'=>1],
    ['id'=>2,'pid'=>0,'name'=>2],
    ['id'=>3,'pid'=>1,'name'=>3],
    ['id'=>4,'pid'=>2,'name'=>4],
    ['id'=>5,'pid'=>3,'name'=>5],
    ['id'=>6,'pid'=>4,'name'=>6],
    ['id'=>7,'pid'=>5,'name'=>7],
    ['id'=>8,'pid'=>6,'name'=>8],
];

app('unlimited_classified')->getUnlimitedClassified($data, 'pid','child');

就能看到列印的無限分類的結果了。

擴張包的開發與釋出
然後需要設定下,擴張包被其他朋友下載使用的時候能夠實現自動新增服務,文件裡有想盡的說明,我們的則做如下修改:
packages/everan/unlimitedclassified/composer.json

"extra": {
        "laravel": {
            "providers": [
                "Everan\\UnlimitedClassified\\UnlimitedClassifiedServiceProvider"
            ]
        }
    }

至此,我們就完成了擴張包的開發和本地測試,接著講一下發布。

擴充套件包釋出

首先把擴張包釋出到全球最火的也是最大的同性交流平臺 GitHub:smile:

從擴張包的開發到釋出
接著再 Packagist 也釋出:point_right: [https://packagist.org/]

從擴張包的開發到釋出
然後點選 Check 按鈕,再點選 Submit ,稍等片刻,等待提交…

從擴張包的開發到釋出
到這裡就已經可以了。

設定程式碼同步

回到我們摯愛的交友平臺:GitHub,點選 Setting,如下:

從擴張包的開發到釋出
先點選 Webhooks 再點右邊的 Add webhooks,跳轉介面如下:

從擴張包的開發到釋出
紅色框框裡都是標了數字的要寫之外,下面三個預設即可,
填寫對應的內容:

  • Payload URL: https://packagist.org/api/github?username=Packagist 的使用者名稱
  • Content type 選擇為 application/json
  • Secret 填寫為下圖複製的 token

從擴張包的開發到釋出
到這裡整個擴張包的開發到釋出就基本前功盡棄了,噢,不好意思,是大功告成了:bowtie:

補充

預設版本是 dev-master,Composer 包的版本號會從 Git 的 tag 中同步過來。

git tag v1.0.0
git push origin v1.0.0

最後

真的是不寫不知道,寫部落格是真的累,不過寫完是真的香啊!第一篇部落格,有什麼筆誤的地方,歡迎指正。謝謝,(●’◡’●)!
[Github]:point_right:https://github.com/Everan-1994/unlimited-c...
注:暫時沒寫 test

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章