学习扩展包的开发到发布

前言

之前看了超哥的教程,从头到尾跟着做了一遍,当时也没弄懂个所以然,就搁置了。时间一久,就全部都给忘完了。今天休息,就想着巩固下在 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": {
            "Everan\\UnlimitedClassified\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Everan\\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,跳转界面如下:

从扩展包的开发到发布
红色框框里除了标了数字的要写之外,下面三个默认即可,
填写对应的内容:

  1. Payload URL: https://packagist.org/api/github?username=Packagist 的用户名
  2. Content type 选择为 application/json
  3. 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 协议》,转载必须注明作者和本文链接
本帖由系统于 3年前 自动加精
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 24
快乐壮

老哥你标题写错了吧 "扩张包"

4年前 评论
Jennie

@快乐壮 终于被发现了,落下了感到的泪水 :smile:

4年前 评论
Jennie

@tianlan 谢谢 :grin:

4年前 评论

git push origin v1.0.0 可以使用 git push --tag 来代替,自动 push 最新的 tag。

4年前 评论
Jennie (楼主) 4年前
chenshu 3年前
miaotiao (作者) 3年前
Jennie

@wade 是的,不是整个项目哈,进入你的包,比如我的 everan/unlimitedclassified ,在这个目录下你可以 git init 就是正常的 git 操作。

4年前 评论
Jennie (作者) (楼主) 4年前

这个namespace namespace Lejin\UnlimitedClassified; 为什么不是everan\UnlimitedClassified

4年前 评论
Jennie

@609468798 我的文章更新于6小时前,你是两小时前看的,我全文搜索都没找到 Lejin 这个词呀,不过刚发布的时候是写的 Lejin ,后面我改了。哈哈 :grin:

4年前 评论

@Everan 感到的泪水

4年前 评论
Jennie (楼主) 4年前
lufeijun1234

很优秀

4年前 评论
Jennie (楼主) 4年前

厉害,也可以把 config , controller, models, router, middleware 等写进去,那样就完美了

3年前 评论
Jennie

哦豁,我的浏览量无了呀 :joy:

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
Everan @ 有鱼科技
文章
1
粉丝
5
喜欢
37
收藏
76
排名:1539
访问:2024
私信
所有博文
社区赞助商