Composer 是 PHP 用来管理依赖关系的重要工具。一个合格的程序员肯定得学会使用别人提供的包,但也应掌握制作和分享自己的软件包的方法,下文将详细讲述如何创建一个自己的 Composer 包。
一、创建Git仓库,用于存放包
composer包是需要仓库的,而仓库最常用的当然就是git,不过碍于笔者的网络(无翻qiang)环境,将采用码云来作为包的仓库。
1. 创建Git仓库
首先第一步,你肯定要有一个git/码云账号,不然怎么创建属于你的仓库呢。这里笔者也不讲述怎么注册账号了,相信天才如你,没问题的(其实是笔者记不得了)。
在拥有自己的码云账号后,创建一个用于存放包的仓库,配置可参考下图:
点击“创建”便可以了。看到下图创建成功的仓库了吗?快快复制git地址,进行下一步操作吧!
2. 拉取仓库到本地上
在自己电脑本地创建一个目录formatJoinData
,移动到新建目录的上级目录中,克隆刚生成的git仓库,命令如下:
git clone https://gitee.com/millionmile/format_join_data.git formatJoinData
二、创建自己的包,同步到Git仓库上
仓库已经建好了,下一步便是去创建自己的包了。
1. 按照下图示例,进行composer包的初始化
进行如上操作后,我们的composer包已经初步创建好了,接着下一步。
2. 新建src目录,在其中根据自己需求添加代码,如下图的FormatJoinData.php
文件
3. 在composer.json添加如下图所示代码,用于自动化加载包内所用到的自定义类文件
4. 更新composer.json后,使用一下代码添加自动加载功能
composer update
5. 更改.gitignore文件,内容如下
/vendor/
.buildpath
.project
/.settings/
.idea
.php_cs.cache
.DS_Store
composer.lock
/*.php
6. 在项目根目录中创建test.php
文件,内容如下
<?php
require_once __DIR__ . '/vendor/autoload.php';
use MillionMile\FormatJoinData\FormatJoinData;
FormatJoinData::hi();
运行该php文件,如果正常输出,那么最基础的composer包配置成功
7. 上传代码到git仓库上
git add .
git commit -m "init"
git tag v1.0.0
git push origin master
git push origin --tags
三、在packagist上发布自己的包
1. 在https://packagist.org/packages/submit
网站中,登录好自己的账号,然后进行如下操作:
2. 如何使用自己的packagist包?
在自己项目中使用下面示例composer命令
composer require millionmile/format_join_data ~1.0
或在composer.json
文件中编辑后更新,均可。
四、设置 Packagist 中的包自动更新
如果包没有设置自动更新的话,那么在提交代码和新的版本标签后,便需要手动进入到packagist网站中,并进入对应的包界面中点击Update
按钮,操作未免较为繁琐。
杯具的是,码云暂不支持Packagist:WebHook配置页面中,根本就不存在自定义POST方式和自定义请求POST内容。
这里,笔者使用略微麻烦点的方法来解决,有兴趣的小伙伴可以学习下(当然,你要是能爬qiang或网络杠杠的,使用git作为仓库的小伙伴可以参考这篇文章发布composer包到packagist上并设置自动更新,就没必要用这种傻方法了)
下面说下笔者的自定义处理方法:
1. 获取自己在packagist中的API TOKEN
在packagist网站中,进入到个人信息管理页面,即可看到下图,获取API TOKEN
2. 获取包的PACKAGIST_PACKAGE_URL
每个包的PACKAGIST_PACKAGE_URL
都是不同的,必须进入到包管理界面中,才能获取到
3. 在项目根目录中创建auto_upload.php
文件,内容如下:
<?php
$tag = 'v1.0.3';
$msg = '进行了一些细微调整';
echo `git add .`; //添加所有更改
echo `git commit -m "$msg"`; //提交更改
echo `git tag $tag`; //创建新版本标签
echo `git push origin master`; //提交新版本到git上
echo `git push origin --tags`; //提交新版本标签到git上
//同步更新packagist上的包信息
//记得修改自己的 API_TOKEN 和 PACKAGIST_PACKAGE_URL 哦
echo `curl -XPOST -H "content-type:application/json" "https://packagist.org/api/update-package?username=MillionMile&apiToken=API_TOKEN" -d "{\"repository\":{\"url\":\"PACKAGIST_PACKAGE_URL\"}}"`;
当需要发布新版本到packagist上时,更改文件中的标签版本号,运行php auto_upload.php
即可
!!注意:win中,curl操作只能够使用双引号,不能够使用单引号来包裹内容,切记切记!如果win中没有安装过curl的话,可以参考这篇博文《windows下使用curl命令&&常用curl命令》进行安装。
虽然已经提交包更新了,但是composer使用国内镜像的话,还需要等待最新的资源信息同步完成,大概等个5-10分钟即可。在此期间,composer update
无效的话也别amazing嗷