PHP Composer 如何创建、发布自己的包
Composer 本身不托管代码,代码放在 GitHub,Composer 只负责管理版本和依赖。
例如我们要发布一个 SilverQ 队列组件到 Composer,步骤如下:
1、前往 https://github.com 建立仓库 silverq
- 克隆代码到目录 ~/home/wwwroot/_git_sth/silverd/silverq
- 进入目录执行
composer init
按提示依次填写,示例:
{
"name": "silverd/silverq",
"type": "library",
"description": "Queue Library for Yaf Framework",
"keywords": ["yaf", "queue"],
"homepage": "http://silverd.cn",
"license": "MIT",
"authors": [
{
"name": "silverd",
"email": "silverd29@gmail.com",
"homepage": "http://silverd.cn"
}
],
"require": {
"php": ">=5.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"autoload": {
"psr-4": {"SilverQ\\": "src/SilverQ"}
}
}
- 编写其他代码并创建好 README.md 提交
2、前往 http://packagist.org
- 用 GitHub 帐号登录
- 点击 [Submit Package],在 Repository URL 处填写 GitHub 的仓库地址
https://github.com/silverd/silverq
- 点击 [Check],系统自动检测项目中 composer.json 是否合格,合格则成功发布
- 设置 GitHub Webhooks 更新指南 ,这样只要在 GitHub 发布新版本后,可自动推送到 Packagist
- 进入 GitHub.com -> silverd/silverq -> Settings -> Webhooks
- 点击 Add wWebhook
依次填入:
- Payload URL: https://packagist.org/api/github?username=silverd
- Content Type: application/json
- Secret: 在
https://packagist.org/profile/
看到个人的 API Token - 勾选 Just the push event.
- 勾选 Active
- 此时访问
https://packagist.org/packages/silverd/silverq
可以看到包已经可以访问并被拉取了
Note: 也可以不设置钩子,每次发布后手动推送下:
curl -X POST -H 'content-type:application/json' 'https://packagist.org/api/update-package?username=silverd&apiToken=XXXXXX' -d '{"repository":{"url":"https://github.com/silverd/silverq"}}'
3、项目中如何使用?
紧接上一步,到项目中执行以下命令:
composer require silverd/silverq
会提示组件版本找不到:
[InvalidArgumentException]
Could not find package silverd/silverq at any version for your minimum-stability (stable). Check the package spelling or your minimum-stability
可能是因为我们的 Composer 使用的国内镜像没有及时同步的原因,把“源”还原回去试试:
composer config -g repo.packagist composer https://packagist.org
仍然不行。
原来是我们还没有在 GitHub 正式 release 一个版本。此时只能拉 dev-master 主分支开发版本,重新执行:
composer require silverd/silverq:dev-master
那么如何在 GitHub 上发布正式版本?
进入 https://github.com/silverd/silverq/releases
,或点击仓库导航里的 Release Tab,然后按提示操作。
有了正式的 release 版本后,再执行 composer require silverd/silverq
就可正常拉取包内容了。