使用GitHub、Composer、Packagist发布管理自己的PHP包

使用GitHub、Composer、Packagist发布管理自己的PHP包_第1张图片
3654.jpg

发布流程

首先准备好了GitHub帐号、Composer程序、Packagist帐号,接下来是如何通过它们发布我们的Composer包。

  1. 创建GitHub仓库:
    默认仓库是空的,没有任何代码和分支(git空仓库的特性),用git克隆到本地。
  2. 初始化 composer.json:

$ cd ~/work/github/
$ git clone [email protected]:yoho2021/hello-world.git

使用composer自带的初始化命令(composer init),创建一个composer.json描述文件。如果想手动编辑,可以去composer官网阅读相关文档获得帮助。


再来添加一个readme,要不然打开github仓库主页的时候,总会提示让你创建一个readme,有readme其实对其他小伙伴能快速了解这个包的功能有很大作用。

3.推送代码:
到此为止我们已经完成了仓库的初始化:初始化composer描述文件,编写readme文档,接下来需要把代码推送到GitHub。

$ git add ./
$ git commit -m 'init hello world package'
$ git push origin master
最后一步需要加origin master参数的原因是空仓库是没有分支的,所以我们需要强制推送本地的master到远端的master,在这之后可以直接用git push命令推送而不需要加后面的参数了。

  1. 发布到packagist.org:
    访问Packagist主页,确认自己已经登录,然后点击右上角大大的submit,然后填入我们创建的仓库的地址(如:https://github.com/yoho2021/hello-world.git),点击Check,然后没问题,再点击Submit。

5.配置GitHub和Packagist之间的自动更新钩子:

  • 根据向导,复制自己的packagist的api token,然后去GitHub配置好仓库的钩子服务,然后点击服务名称后面的笔图标,进去之后点Test service。如果services列表里的packagist前面是绿色的对钩,说明成功了。

  • 接着我们再去packagist的hello-world包详情页面刷新,红红的警告没有啦!(如果这里还有,那么说明在GitHub创建的service填写的资料有错误,第一个是username,不是email地址,第二个是packagist api token,一定不要搞错,第三个不需要填)。

6.测试安装hello-world包:

$ composer require yoho2021/hello-world dev-master
注意:此处需要带上dev-master

7.添加示例代码:
首先我们编辑hello-world包仓库代码里的composer.json,加入autoload配置。

{
"name": "yoho2021/hello-world",
"description": "this is a hello world repo for composer.",
"license": "MIT",
"authors": [
{
"name": "zhouyang",
"email": "[email protected]"
}
],
"autoload": {
"psr-4": { "Yoho\Demo\": "src" }
},
"require": {}
}

这里我们添加了autoload属性,并且是什么psr-4,这里我需要说一下,PSR-X是php-fig发布的一系列规范中的一个自动加载规范,如果想要深入了解它的其他规则,请阅读PHP-FIG。添加的配置代表我们定义了一个命名空间的起始目录,比如src目录里有一个Hello类文件(类名必须和文件名一致),那么要想通过autoload访问它,必须把命名空间写成namespace Yoho\Demo;

$ cd ~/work/github/hello-world/
$ mkdir src
$ cd src/
$ touch Hello.php

namespace Yoho\Demo;
class Hello
{
private $name;
public function __construct( $name = 'World' )
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function hello()
{

    return 'Hello '.$this->name.'!';
}

}

在提交代码之前,我们需要自己先测试一遍我们的代码是否有问题。

$ composer install

然后创建一个测试php文件,引入autoload,并且实例化一个我们的Hello类。

$ touch test.php

require_once "vendor/autoload.php";
$hello = new Yoho\Demo\Hello();
echo $hello->hello();
echo "\n";
$obj = new Yoho\Demo\Hello('Hello world');
echo $obj->hello();

推送这些新代码到GitHub,因为我们配置了钩子服务,所以在推送之后不久,GitHub会通知Packagist仓库有更新,然后小伙伴们就轻松的拿到你的更新的代码啦!

包版本管理

至此我们已经可以把自己的代码发布到线上了,但是有一个问题,别人的包都有版本号,而我们的安装需要手动指定dev-master要不然composer会说找不到stable版本,这里我们就需要引入版本和分支概念了,composer包的版本是来自于git的分支和tag,分支代表dev版本(除master外),tag代表stable版本,因为正常来说,大家都是这样管理项目的版本的,所以直接无痛模式切换,自由方便。下面我们就来模拟一下如何发布轻量级的版本(相对使用私钥签署tag并发布的过程)。

$ git branch

我们会看到绿色的master前面有个星号,说明当前工作分支是master,那么对应的composer包的版本就是dev-master,是不是有些熟悉了。接下来我们创建一个0.1分支,作为我们0.1版本的迭代分支,并基于它提交一些代码,然后推送。

$ git checkout -b 0.1

比如我们编辑readme,添加使用示例(虽然我们在0.1分支开发和提交,但是我们一定要在特性或者bug修复的工作完成之后,合并回master)。

$ git add .
$ git commit -m 'update readme, add Hello class demo'
$ git push origin 0.1

因为我们创建的0.1分支在远端是不存在的,所以要指定推送到远端的0.1,GitHub会自动创建一个0.1分支,和master是一样的。这个时候我们再看看我们的hello-world包的版本,使用composer show yoho2021/hello-world命令查看。

但是只有dev是不够的,很多线上的版本依赖的都是stable,肯定不会让一个dev包上去的,这个时候,我们觉得可以发布一个稳定版本了,那么在0.1分支上,我们发布一个0.1.0版本。

$ git tag 0.1.0
$ git push --tags

推送成功之后,用composer命令查看一下版本信息,是不是有了一个0.1.0的stable版本了呢!到此为止,基本的发布流程就讲完啦!

你可能感兴趣的:(使用GitHub、Composer、Packagist发布管理自己的PHP包)