Composer是PHP的一个依赖管理工具,它使得PHP焕发新的生机,有了现代化的WEB开发规范,Packagist是PHP组件的库,也有其他的镜像。
在Packagist上提交了一个自己开发的PHP组件,这样其他开发者就可以使用Composer使用这个包了。这个组件并没什么功能,主要是看看提交PHP组件的流程,并记录了过程中遇到的问题及解决方法,以供参考。
提交PHP组件步骤:
1.新建一个项目目录,创建一个composer.json文件,格式如下:
PHP
{
"name": "your-vendor-name/package-name",
"description": "A short description of what your package does",
"require": {
"php": "^5.3.3 || ^7.0",
"another-vendor/package": "1.*"
}
}
这个json格式的文件中包含组件的基本信息,这里还差自动加载的方式,要根据具体开发模式指定自动加载方式,这里require可以指定这个组件依赖的其他组件,composer都会自动解决依赖。
附上完整的composer.json内容作为示例:
JavaScript
{
"name": "tanteng/laravel-page-loaded-time",
"description": "Display page loaded time",
"keywords": ["laravel","performance"],
"homepage": "https://github.com/tanteng/laravel-page-loaded-time",
"license": "MIT",
"authors": [
{
"name": "tanteng",
"email": "[email protected]",
"homepage": "http://www.tanteng.me",
"role": "Developer"
}
],
"require": {
"php": "^5.3.3 || ^7.0",
"laravel/framework": "~4.0"
},
"autoload": {
"psr-4": { "Loading\": "" }
}
}
2.开发组件功能
要注意遵循psr规范,使用命名空间。
3.把组件提交到Github上
提交组件到Packagist之前需要先把代码提交到github上,在Packagist只需填写组件的github地址。
4.提交组件地址到Packagist
这样就完成的PHP组件提交到Packagist的过程,具体请参见Packagist官网。
问题:使用composer require找不到组件
组件提交到Packagist上,提示发布成功了,但是使用composer命令却找不到组件:
PHP
composer require tanteng/laravel-page-loaded-time
如图:
由于我的composer使用的国内镜像,猜测可能是没有同步的原因,使用这个命令把“源”改回去还是不行。
PHP
composer config -g repo.packagist composer https://packagist.org
原来我的组件还没有在github上发布正式,这个时候还是开发版本dev-master.应该加上dev-master版本。
PHP
composer require tanteng/laravel-page-loaded-time:dev-master
果然指定了dev-master版本可以成功更新组件,但是这样不行,我们要有一个正式版本。
github发布版本
进入组件的github主页,找到导航上“releases”,点击进去如图页面,就可以创建一个版本,填写好信息之后即可发布版本。
按照页面上的提示填写内容,完成后发布。发布版本后,通过composer require发现还是找不到包。
设置自动更新版本
原来还要在Github上配置一下自动更新。具体步骤参考:https://packagist.org/about#how-to-update-packages
我直接通过手动的方式发送curl请求来设置,这样还简单一点,不过这样每次发新的版本都需要这样请求一下:
PHP
curl -XPOST -H'content-type:application/json' 'https://packagist.org/api/update-package?username=tanteng&apiToken=secret' -d'{"repository":{"url":"https://github.com/tanteng/laravel-page-loaded-time"}}'
返回{“status”:”success”}表示成功。
再打开https://packagist.org/packages/tanteng/laravel-page-loaded-time,发现已经是正式版本了。
我用的是composer国内镜像,因为众所周知的原因,连代码仓库也要被墙,我服!等了几个小时再试,这个时候镜像同步更新了,再次输入:composer require tanteng/laravel-page-loaded-time,这个时候可以成功更新了。如图,vendor文件夹下也自动装载了依赖的其他组件