动手开发自己的第一个 composer 包

简介: 原文:http://blog.jayxhj.com/2016/05/basic-composer-package-development/ composer 是 PHP 的依赖管理工具,本篇文章就来说明如何构建一个包,并提交到 Packagist ,这样别人就可以方便地通过 composer 使用你的包了。

原文: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
            └── config

12 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:

1
2
3
4
5
>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 去扩展自己的类库,通过引入其他的类库来填充自己的功能,就不用重复造轮子了。

目录
相关文章
|
API
免费节假日api接口使用教程-聚合数据
免费节假日api接口使用教程-聚合数据
6041 0
免费节假日api接口使用教程-聚合数据
|
3月前
|
人工智能 安全 开发工具
大型项目 Git 操作与推送规范
本规范为生产级、公司级强制执行标准,适配Vue3+NestJS前后端分离项目,基于简化Git-Flow搭建,通过「本地Hooks校验+服务端CI兜底」双重防护,统一团队Git工作流,彻底解决分支混乱、提交不规范、代码污染、版本回溯失效等问题,满足研发合规与审计要求。
303 1
|
11月前
|
人工智能 智能设计 算法
2026 GEO生成搜索优化技术白皮书:章节详解与案例深度分析
周有贵,GEO专家,深耕AI时代流量入口变革,倡导从SEO到GEO(生成式引擎优化)的认知重构,聚焦“被发现-被理解-被推荐”三层框架,推动企业通过结构化内容、信任资产与平台适配,实现AI信源卡位。
|
3月前
|
人工智能 编解码 安全
英特尔中国加速适配国产AI模型MiniMax H3布局本地化部署
英特尔锐炫Pro B70完成对国产开源视频模型MiniMax H3的Day 0适配,支持15秒2K+立体声视频生成。依托32GB显存、367 TOPS算力及8卡混合并行方案,实现开箱即用、低成本本地部署,加速AI视频商业化落地。(239字)
352 1
|
5月前
|
SQL 运维 关系型数据库
AnalyticDB MySQL vs ClickHouse:OLAP 数据库选型深度对比——谁更适合企业级分析
AnalyticDB MySQL(阿里云PB级全托管实时数仓)与ClickHouse深度对比:在多表JOIN、高并发、实时更新、全托管运维及企业生态集成上全面领先,TPC-DS测试性能优3–5倍,成本可降30%–60%,是企业级复杂分析首选。
350 7
|
5月前
|
人工智能 安全 架构师
提示词工程不是写长说明书,而是做语义压缩
提示词工程本质是“语义压缩”:剔除冗余情绪,提炼角色、任务、约束、格式四大要素,将模糊需求转为高信噪比指令。AI越自主,边界设定越关键——不是教它怎么做,而是精准定义“谁、干啥、不碰啥、交什么”。
403 0
提示词工程不是写长说明书,而是做语义压缩
|
7月前
|
存储 数据采集 人工智能
2026年企业如何建设数据系统?湖仓一体构建合规高效数据体系
数字化转型深化期,数据孤岛、质量差、合规难等问题制约价值释放。2026年,企业聚焦数据治理落地与湖仓一体架构,构建合规、高效、可扩展的数据体系,推动数据从分散管理迈向资产化运营,筑牢智能决策与业务创新根基。(239字)
|
7月前
|
人工智能 边缘计算 自然语言处理
AI 英语学习智能体的开发
本项目专注打造真正懂教学的AI英语智能体:深度融合二语习得理论,构建CEFR定级、脚手架提示、多维反馈等教学逻辑;模块化设计口语/词汇/写作功能;选用Whisper+GPT-4o+RAG技术栈;强调提示词工程与低延迟交互,兼顾合规与实效。(239字)
|
10月前
|
JavaScript Cloud Native Java
基于云原生微服务的门诊系统源码架构:Spring Boot + Vue.js 实践与容器化部署
门诊系统是医疗机构数字化转型的核心,通过Spring Boot + Vue.js架构实现高效、智能的全流程管理。支持多租户、容器化部署,涵盖预约挂号、电子病历、医保结算、药房管理等模块,优化患者体验,提升医疗质量与运营效率,适用于基层至大型医院的多样化场景。
439 1

热门文章

最新文章