大家知道,在现代web开发当中,使用包管理工具来进行开发编程提高效率已经成为来一个必备技能,无论是Java的maven,javascript的npm,python的pip,android的gradle,ios的pods,大部分开发语言都有了自己的包管理工具,PHP也一样,也搭配上了composer。大家都在使用composer包来引入优质的第三方软件包,那么,phper们如何开发自己的composer包来分发出去共享给别人用呢?下面我为大家讲解。
工欲善其事,必先利其器。关于composer都安装,我不多做介绍。不会都点我去学习,安装好composer后我们还需要有一个代码托管工具来托管代码。因为当php项目写好composer申明后,composer会自动从仓库抓取代码到项目内。这里推荐使用github作为代码仓库。
一、申明包信息
在github上新建一个代码仓库,然后clone到本地,如composer-package,进入目录,运行composer init,申明信息。
{
"name": "jimphei/eptksdk",
"description": "淘客sdk",
"type": "library",
"license": "Apache-2.0",
"authors": [
{
"name": "jimphei",
"email": "xxxxx@qq.com"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"Jimphei\\EptkSdk\\": "src/"
}
}
}
//"Jimphei\\EptkSdk\\": "src/"表示包把包关联到src目录
二、进入开发项目目录,修改composer。json文件,引入依赖
"repositories": {
"jimphei/eptksdk": {
"type": "path",
"url": "/Users/mac/www/eptksdk",
"options": {
"symlink": true
}
}
}
配置中的“type”: “path” 表示引入的是一个本地仓库,url定义了包的路径,路径可以使用相对路径或绝对路径。
虽然设置了type和url后就可以开发了,但是composer会复制包的代码到vendor目录,而且每次包发生变更都要执行composer update
为了避免更新执行update操作,可以通过设置”symlink”: true参数让composer创建一个软链接到包所在目录
最后一步操作就是使用composer require命令来引入软件包
composer require jimphei/eptksdk @dev
到了这部,我们进行本地开发了。我们在包目录到src目录下新建一个Test.php文件,代码如下
namespace Jimphei\EptkSdk;
class Test
{
public static function sayHello(){
echo 'Hello composer';
}
}
然后我们在主项目中调用。
use Jimphei\EptkSdk\Test;
Route::get('think', function () {
return 'hello,ThinkPHP6!';
});
Route::get('test',function (){
echo Test::sayHello();
});
//这里我为了方便直接使用到tp框架。
我们看看运行结果

说明已经成功了。在本地开发完功能后就可以发布了
三、发布到Packagist
1.首先要在Packagist上登录
2.点击顶部导航条中的Summit按钮
3.在输入框中输入第一步中github上的仓库地址,如:https://github.com/xxxxxx/xxxxxx
4.然后点击Check按钮
5.Packagist会去检测此仓库地址的代码是否符合Composer的Package包的要求
6.检测正常的话,会出现Submit按钮,再点击一下Submit按钮,我们的包就提交到Packagist上了,到这部就可以使用了。
为了避免每次发布版本都要在发布到packagist到麻烦,可以配置wehooks实现自动从github更新到packagist。
1.从Packagist点击个人中心点击profile获取token然后复制
2.到github项目首页上点击settings、点击webhooks、点击addwebhook
3.把https://packagist.org/api/bitbucket?username=USERNAME&apiToken=TOKEN 复制到Payload URL,在下方输入密码后保存
配置完成.接下来别人就用通过composer require jimphei/eptksdk来使用你到代码了。