创建 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 协议》,转载必须注明作者和本文链接