使用Composer创建公共类库

概述

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

优势

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

步骤

本地开发

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

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

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

  • 在目录中创建composer.json 文件,并添加形如以下的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"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中添加如下信息:

1
2
3
4
5
6
"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. 先行版本号及版本编译信息可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

参考资料

Thanks for reading.