人人为我,我为人人!向社区发布自己的 Composer 包
PHP项目,大多遇到过以下问题
- 找到了一个类,需要把这个类引入项目,放在哪个目录?
- 怎么autoload?
- 它有没有依赖什么扩展?
- 它会不会需要使用比现在更高版本的PHP上?
如果被戳中,请抽一点时间,服下Composer 这味解药 Composer详细介绍 。
Composer可以轻松管理这些相互依赖的包,Composer的出现无疑是为了让所有的从事PHP开发的程序猿劲往一处使,增加复用,实现像搭乐高积木一样编程,不必重复发明轮子,能够将开发社区塑造得更加生态化。
本人就经常使用composer命令为Laravel项目添加各种扩展,非常方便!
人人为我,我为人人!
同理,自己写的代码一样可以贡献给社区,这样别人就可以方便地通过 Composer 使用你的包,本教程介绍一下发布自己包的具体步骤:
首先,Packagist 官网是Composer包的资源库,所有已经发布的包都能在其中查找到,我们即将发布的包也会提交到上面, Packagist 获取到元数据信息后,具体代码会从包源代码所在的 GitHub 上拉取,因此需要准备:
- 创建github.com帐号
- 创建github.com工程
- 创建packagist.org帐号
此处假定GitHub工程已经初始化完成,新手GitHub相关知识自行补足 GitHub详细介绍
准备就绪,进入项目目录(本教程发布的是一款云打印机的SDK)
1、初始化项目,生成Composer包描述文件
本例代码,目录结构:
将类文件放在src目录下
初始化一个Composer包描述文件composer.json,在工程根目录执行命令:
composer init
会出现如下向导提示:
Package name (/) [kelaocai/yprint]: baocai/yprint
Description []: Elind Printer SDK
Author [kelaocai , n to skip]:
Minimum Stability []: dev
Package Type (e.g. library, project, metapackage, composer-plugin) []: sdk
License []: MIT
重要的几个填写项:
- Package name(重要):包名,一般是公司名+"/"+包名 比如 baocai/yprint
- Minimum Stability:通常默认填写dev,因为第一次代码Push完,是在dev-master分支上,dev也就是最小稳定版本标识号
- Package Type:根据库类别填写,sdk,lib,都可以
- License:版权,默认填写 MIT
接下来填写自身库需要的依赖,默认填no,后续可以在composer.json中补充修改Would you like to define your dependencies (require) interactively [yes]? no Would you like to define your dev dependencies (require-dev) interactively [yes]? no
一路回车,工程目录中已经生成好composer.json
在composer.json中增加自动加载配置,这里主要是对命名空间和本地代码目录之间的映射
类命名空间 为 BaoCai\Yprint,对应配置:
"autoload": {
"psr-4": {
"BaoCai\\": "src/"
}
}
完整的配置文件:
{
"name": "baocai/yprint",
"description": "Elind Printer SDK",
"type": "sdk",
"license": "MIT",
"authors": [
{
"name": "kelaocai",
"email": "kelaocai@163.com"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"BaoCai\\Yprint\\": "src/"
}
}
}
2、提交GitHub工程
将第一步中生成的项目文件,提交到GitHub
git add .
git commit -m 'composer init'
git push
确认提交成功后进行下一步
3、向Packagist提交包
访问Pakcagist官网,登录后,点击右上角Submit按钮,进入发布向导
此处填写GitHub工程地址
GitHub地址:注意是https开头的访问链接
如果找到,会提示 The package name found for your repository is: baocai/yprint, press Submit to confirm.
点击Submit提交按钮创建
一切顺利,可以看到发布成功页
4、设置GitHub代码自动同步
一旦在Pakagist上发布了包,之后的版本更新和代码同步,有一个机制来保证,就是GitHub中的事件通知服务,用于代码递交时触发一个事件,将代码同步到其他环境中。
添加服务,服务列表中选择 Packagist,进入向导
主要填写两项Packagist配置信息:
- 用户名: 注意是Packagist上的用户名
- Token: 通讯令牌
- Domain: 可不用填写
其中 Token需要到Packagist的个人设置里面去获取 跳转查看
填写完毕,提交后,记得测试一次,完成首次同步,
如果成功会提示以下信息:
Okay, the test payload is on its way.
回到Packagist,刷新,应该没有再出现 (Not Auto-Updated) 的提示,说明同步机制已经生效,之后每次GitHub变化,会自动通知并同步。
5、验证包安装
以上步骤完成,就可以验证一下包是否能从库中查询到,并且验证是否能够安装
!特别注意,因为刚提交,还没有设置版本,此时版本默认是dev-master,如果直接require包名,会提示找不到对应版本,这里如果不知道,会很坑,务必加上版本指定,这里是:dev-master
composer require baocai/yprint dev-master
- Installing baocai/yprint (dev-master 729feee) Cloning 729feee5d4 from cache
看到成功安装提示,顺利完成发布!
6、设置版本
版本默认是dev-master,Composer包的版本号会从Git的tag中同步过来,因此先设置项目代码的tag,回到项目目录
git tag 1.0.0
git push --tag
刷新Pakagist项目页,已经同步好版本:
再次安装验证,已经可以不用显式指定版本号,自动安装最新版本
composer require baocai/yprint
如果用composer命令的库指向的是国内全量镜像,需要稍等一下服务器同步,刚开始,可能会报找不到安装包的错误,如果一切正常,会看到版本提示,安装成功!
composer require baocai/yprint
Using version ^1.0 for baocai/yprint
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: