创建 PHP 扩展包步骤 -- 课程学习分享

文章写于学习了超哥的教程 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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!