原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/

composer 是 PHP 的依赖管理工具,本篇文章就来说明如何构建一个包,并提交到 Packagist ,这样别人就可以方便地通过 composer 使用你的包了。

开发 composer 包有以下几个步骤:

  1. 初始化 composer.json 文件
  2. 定义命名空间及包名
  3. 实现包需要实现的功能
  4. 提交到 GitHub
  5. 在 Packagist 注册包

初始化 composer.json 文件

安装好 composer 后即可在本地运行 composer init 通过交互式命令行设置 composer.json 。

下面介绍其中的几个属性,以及常规的设置:

  1. name

    此属性定义包名,以 / 隔开,前面的为供应商名字,后面为包名,供应商代表 Packagist 网站为开发者提供的唯一的名字,用来组织包以及防止命名冲突。所以提交时最好先访问 https://packagist.org/packages/yourvendorname 将 url 中的 yourvendorname 替换为你想要取的名字,如果页面没有 404 ,说明已经被注册了。

  2. license

    许可证。关于许可证,建议看两篇文章,开源项目 license 介绍 、 如何选择 license

  3. require

    安装当前包所需的依赖。只有所有依赖被安装当前包才会被安装。

  4. autoload

    此配置下主要是 PSR-4 或者 PSR-0 设置,更推荐使用 PSR-4 标准。

http://json-schema.org/ 上介绍了 JSON Schema 的定义以及各个语言对其各种功能的实现,有 validator 的实现,其中 JSON Schema Validator 是在线的验证服务。其实最简单的就是使用 composer validate composer.json 来验证文件是否是有错误。

这是我演示的设置 composer.json 的视频

项目结构

以我开发的 单点登录 SDK 为例,此项目基于 Laravel ,实现了站点接入单点登录系统的简单接入,应用只需在服务端注册并实现指定接口,即可接入 SSO 。

项目结构是典型的 MVC 结构,

1
.
└── geo└── geosso├── LICENSE├── README.md├── composer.json└── src├── Contracts├── Http│   ├── Controllers│   ├── Middleware│   └── Requests├── ParamsBean├── Providers├── Support└── config12 directories

LICENSE、README.md 及 composer.json 是运行 tree -d 之后手工添加上去的。

项目根目录定义在 src 下,在 composer.json 中也有定义,这样当 composer 加载这个包时就知道如何通过命名空间去解析文件路径。

Http 目录代表请求响应,之下的 Controllers 表示合法请求的控制器,Middleware 代表请求的第一道关卡,通过中间件去拦截请求,Requests 去获取前端请求并对请求过滤。

Contracts 代表接口定义。ParamsBean 代表应用层与底层服务沟通时的参数封装,通过 Bean 去获取各个参数,而不是传递 array 使得调用一致,并且强制接口调用时做类型检测,可以很大程度上统一各层之间的参数传递。

Providers 代表 Laravel 的服务容器,通过服务容器,可以注册路由与配置,加载助手类,绑定接口与其实现。

Support 就是一些助手类,对常用的与逻辑无关的功能的封装,config 代表应用自己的配置,通过 config 可以方便地将配置设置并使用全局函数 config() 调用。

提交至 GitHub

按照前面的步骤,一个包就有了基本的骨架,接下来就是上传至 GitHub ,配置项目,集成持续集成服务,发布开源项目许可证。

GitHub 初始化项目时可以选择生成 .gitignore 文件,选择许可证,初始化 README.md 文件,切换至本地的项目目录后,按如下步骤即可将目录上传至 GitHub:

12345
>git init # 初始化仓库>git remote set-url origin --push --add git@github.com:jayxhj/geosso.git # 添加远程追踪仓库地址> git add .> git commit> git push origin master

提交至 Packagist

Packagist 为 composer 默认获取包元数据信息的地址,从 Packagist 获取到元数据信息后,再从 GitHub 上拉取代码。因此,当把你开发的包上传至 GitHub 后还需要将其在 Packagist 注册,这样全世界的人都能通过 composer 去拉去你的代码了。

提交至 Packagist 只需三个步骤:

  1. 注册帐号
  2. 在 https://packagist.org/packages/submit 提交开发包
  3. 设置 webhook 以便提交包更新后能及时地同步至 Packagist

自此,一个基本的包开发就结束了。通过 composer 来管理 PHP 的依赖,通过编写 composer package 去扩展自己的类库,通过引入其他的类库来填充自己的功能,就不用重复造轮子了。

动手开发自己的第一个 composer 包相关推荐

  1. redis 附近的人_使用redis—geo api实现搜索附近的人,自己写的一个composer包

    安装 如果是应用在项目当中的话找到根目录,需要和 composer.json同级 composer require gaopengfei/redis_lbs 基本操作 初始化 require_once ...

  2. composer 安装dev包_「PHP编程」如何搭建私有Composer包仓库?

    在前一篇文章「PHP编程」如何制作自己的Composer包?中,我们已经介绍了如何制作自己的 composer 包,以及如何使用 composer 安装自己制作的 composer 包.不过,这其中有 ...

  3. 学习开发自己的composer包,并使用GitHub实时更新到Packagist

    composer是什么 Composer 不是一个包管理器.是的,它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你 ...

  4. 开发composer包

    一.初始化(生成composer.json文件) composer init #输入你要创建的composer包项目命名空间 Package name (<vendor>/<name ...

  5. php开发自己的composer包

    php开发自己的composer包: 前提需要安装composer 网站:https://packagist.org/ 可能需要梯子访问 开发是最好先注册一下 第一步创建插件: 当想要初始化一个php ...

  6. 使用 satis 搭建一个私有的 Composer 包仓库 在我们的日常php开发中可能需要使用大量的composer包,大部份都可以直接使用,但在公司内部总有一小部份包是不能公开的,这时候我们就需

    使用 satis 搭建一个私有的 Composer 包仓库 在我们的日常php开发中可能需要使用大量的composer包,大部份都可以直接使用,但在公司内部总有一小部份包是不能公开的,这时候我们就需要 ...

  7. 怎么开发一个npm包

    一.注册npm账号 * 怎么将代码提到github,大家都知道需要一个github账号 * 同样,开发一个npm包,当然也需要一个npm账号,将npm包发布到npm的托管服务器 * 注册地址:[htt ...

  8. 把函数包起来就是一个R包 - 完整开发指南

    生物信息学习的正确姿势 NGS系列文章包括NGS基础.高颜值在线绘图和分析.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流 ...

  9. 经典《像素鸟》游戏,难道你不想自己动手开发一个嘛(附源码免费下载)

    经典的飞机大战游戏,难道你不想自己动手开发一个嘛! 语言:Java 代码的编译软件:Eclipse 如果你用的也是eclipse的话 直接导入文件 就可以 ,如果不是的话,自己建一个项目,将代码cop ...

最新文章

  1. 使用xmanager连接centos5.5
  2. 二次探测再散列举例_二次探测散列法
  3. 期货与期权(part3)--期货合约和期权合约
  4. Spring @Required 注释
  5. docker sonarqube 7.7 sonar-scanner-4.6.2 maven 安装、搭建+实战
  6. 解释器模式(行为模式)
  7. 开源项目工时系统_工时统计系统 - 服务端
  8. CHIP-seq流程学习笔记(11)-使用GSEA软件进行GSEA分析
  9. cad查看_CAD手机看图软件中批注的图片在电脑上如何查看?
  10. csrf 与 samesite
  11. table表格表头合并单元格问题
  12. 利用笔触素材制作逼真毛笔字
  13. 高层次综合综述:FPGA HLS Today Successes, Challenges, and Opportunities
  14. 让你脊背发凉的10个故事
  15. 百度地图 鼠标绘制工具BUG修复(地图自动平移)
  16. 使用element-ui实现表格分页
  17. 物料编码主文件------(整理)
  18. [万字]java后端研发岗秋招常见面经总结
  19. 计算机硕士非全日制的有双证吗,双证非全日制太坑了?非全日制研究生有哪些优势?...
  20. python把中文文档变为拼音

热门文章

  1. 他在京东每天做1000万图灵测试
  2. 橡鹭科技获源码资本亿元融资,美团原核心高管加盟,发力服务机器人
  3. 量子信息之父辞世,开山论文写完14年才被发表,晚年去当建筑工人
  4. 一文看懂当红Serverless:为何AWS、阿里云和腾讯云都在发力「无服务器架构」
  5. 只用2页纸,北大数学校友攻破计算机30年难题!过程浅显直白,看懂仅需线性代数基础...
  6. Day 8 Linux 优化-补充目录结构
  7. Linux下golang开发环境搭建
  8. data (phantonjs onclick)exploring cleaning
  9. bzoj1874: [BeiJing2009 WinterCamp]取石子游戏
  10. SpringBoot 搭建