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

3654.jpg

发布流程

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

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

$ cd ~/work/github/
$ git clone git@github.com: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": "zhouyang2021@gmail.com"
}
],
"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

<?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

<?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版本了呢!到此为止,基本的发布流程就讲完啦!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容