当前位置: 首页 > news >正文

使用Composer创建公共类库

概述

如果多个项目中存在使用相同类库、模块的情况,此时可以考虑将类库或者模块单独抽取出来,形成独立类库,通过composer
来进行依赖管理,这样可以更方便维护,大大提升开发效率。

优势

  • 可以对特定模块进行统一维护和升级
  • 特定的类库可由专人进行维护,保证稳定性和可靠性
  • 避免了重复开发的情况

步骤

本地开发

为了方便调试,可先在本地现有项目中开发类库,等到开发完成后,再将相关代码单独抽取出来。

  • 首先在项目中创建一个存放类库的目录,如packages/zacksleo/my-libs,

其中packages是类库总目录, zacksleo是用户名,相当于命名空间的第一级,my-libs是类库存放目录。

  • 在目录中创建composer.json 文件,并添加形如以下的内容:
{"name": "zacksleo/my-libs","description": "my libs","type": "library","license": "MIT","authors": [{"name": "zacksleo","email": "zacksleo@gmail.com"}],"minimum-stability": "stable","autoload": {"psr-4": {"zacksleo\\my\\libs\\": "src"}}
}

其中,name是类库名称,descrption是详细说明,type是类别,license是使用的协议,authers是作者信息,

minimum-stability 用来声明最小依赖,通常有devstable可选,autoload中的psr-4声明了

命名空间和对应的目录,注意命名空间就当使用双反斜杠,目录使用相对路径,此外声明了目录为`src``目录

  • src目录中添加相关代码,其中的类使用命名空间zacksleo\\my\\libs

  • 在项目的composer.json中,通过path方式引入本地类库,如可在repositories中添加如下信息:

  "repositories": {"my-libs": {"type": "path","url": "packages/zacksleo/my-libs"}}

其中my-libs是别名,可任意填写,type设置成path, url为类库所在的相对路径(与composer.json文件相对)

  • 通过composer require命令或者在composer.json中的require部分添加声音,来实现依赖加载,如

composer require zacksleo/my-libs

在Github上创建库并上传代码

当在本地开发完成后,可将类库独立抽取出来(此处的my-libs目录下的内容),并提交到Github上新建的仓库中

配置packagist并发布

  1. 先在packagist.org中注册好账号,以便发布包。
  2. 在Github的仓库中,点击settings,找到 Intergrations & services, 点击Add servies, 选择Packagist,

填写在packagist.org注册的用户名和Token(在Profile中找到Your API Token)

点击确定添加,这样,每次Github的变动,都会自动更新到packagist上,免去了手动更新的麻烦

本地依赖改成线上版本, 并清除开发代码

类库一经发布到packagist上后,就可将本地项目composer.json添加的repositories移除,重新运行composer install

来安装packagist上的版本,同时packages 目录亦可删除。

版本问题说明

composer使用语义化的版本进行依赖管理,因此类库在更新和发布时,所标记的版本号,也就当遵循语义化的版本规范。

基主要有以下几个内容:

版本格式:主版本号.次版本号.修订号,版本号递增规则如下:

  1. 主版本号:当你做了不兼容的 API 修改,
  2. 次版本号:当你做了向下兼容的功能性新增,
  3. 修订号:当你做了向下兼容的问题修正。
  4. 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

参考资料

  • Composer中文文档
  • 语义化的版本规范

相关文章:

  • T/CCSA 663-2025《医疗科研云平台技术要求》标准解读与深度分析
  • SuperMap GIS基础产品FAQ集锦(20250603)
  • 深入剖析物联网边缘计算技术:架构、应用与挑战
  • VR 虚拟仿真工器具:开启医学新视界的智慧钥匙​
  • 2025年MathorCup数学建模D题短途运输货量预测及车辆调度问题解题文档与程序
  • AWS App Mesh实战:构建可观测、安全的微服务通信解决方案
  • 枫之谷Artale端午节大当机----后端技术的巨大风险
  • HarmonyOS运动开发:精准估算室内运动的距离、速度与步幅
  • [Java 基础]Java 语言的规范
  • 鸿蒙生态再添翼:身份证银行卡识别引领智能识别技术新篇章
  • HarmonyOS Next 弹窗系列教程(2)
  • 95. Java 数字和字符串 - 操作字符串的其他方法
  • Cursor使用最佳实践总结
  • Nginx+Tomcat负载均衡
  • 014校园管理系统技术解析:构建智慧校园管理平台
  • Nginx+Tomcat 负载均衡、动静分离
  • 【C++项目】负载均衡在线OJ系统-1
  • java后端生成心电图-jfreechart
  • Web后端快速入门(Maven)
  • React前端框架
  • 网络工程师有前途吗/海淀区seo搜索引擎
  • 翻译网站怎么做/保定seo排名外包
  • 做网站的得多少钱/微信朋友圈广告30元 1000次
  • 免费做链接的网站/引流推广
  • 做ar网站/安卓优化大师2023
  • 做网站和app怎么跑业务/seo排名啥意思