使用版本管理创建composer私有库

徐璆
• 阅读 1999

一、背景

多个项目有相同代码
 
 

二、创建

1、初始化一个裸仓 xxxx.git

2、git clone 到本地

3、在根目录下创建src目录,composer的一种格式规范,composer库的代码在该目录下开发

4、初始化composer配置,composer init 生成 composer.json,交互式【一路回车】生成一些配置和属性,也可以复制别的知名第三方库composer.json文件进行修改。最终如下,

{
    "name": "galaxy/platform",
    "description": "xxxxxx库",
    "type": "library",
    "require": {
        "php":">=5.6"
    },
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "Galaxy\\": "src/"
        }
    },
    "authors": [
        {
            "name": "xxxxx",
            "email": "xxxxxx@qq.com"
        }
    ]
}

其中比较重要的是
require::库对环境的要求,以及指导不同的库的加载版本
autoload:自动加载配置,这里使用psr-4规范,定义Galaxy作为根命令空间,映射src目录

5、创建src/Traits/RpcTrait.php 其命名空间即为 Galaxy\Traits\RpcTrait

6、提交代码,推送版本
 
 

三、引入

1、在项目代码的composer.json文件引入如下配置

"repositories": {
    "galaxy/platform": {
        "type": "git",
        "url": "xxxx.git"
    }
},

使用版本管理创建composer私有库

其中galaxy/platform是我们自定义的包名,也是最后安装完的目录结构,vendor/galaxy/platform
执行composer update 即可,本质是调用git clonegit pull配置的私有库仓库地址,获取代码覆盖vendor/galaxy/platform,所以这里是需要有克隆和拉取私有库代码的权限,如果
仓库是ssh协议,则需要先密钥授权
仓库是https或http协议,则需要登录凭证,也就是仓库托管平台的账号密码;如果是http还额外需要在composer.json增加配置【在config中增加"secure-http": false

注意:默认拉取是master分支的最新版本,这里可以指定分支以及版本。经过以上操作后,composer.json会默认生成require配置【"galaxy/platform": "dev-master"】,其中key是包名,值是固定格式dev-{{分支}}#{{版本hash或标签}},如果我们指定了某个版本。就会拉取指定版本的私有库代码,如图
使用版本管理创建composer私有库
 
 

四、使用

像正常的库使用,如图
使用版本管理创建composer私有库
使用版本管理创建composer私有库
 
 

五、开发与迭代

1、没有第三方依赖的代码,可以直接编码,在私有库项目中进行开发测试,这里可以在src目下建Tests目录,写测试用例,或者创建Demo目录,写调用示例;

2、有第三方依赖的代码,目前我不知道如何直接在私有库项目中进行开发,不过我想到一种方法,先在业务项目代码中对私有库进行开发,开发测试通过后,将代码覆盖私有库自己的仓库代码进行提交推送,然后在业务项目代码,执行composer update
 
 

这里提供在本地开发和调试自定义composer库的一种方案。
1、composer库是单独的git仓库;业务代码是另一个仓库
 
2、业务代码composer.json中,将repositories的自定义composer库的引入方式改成本地路径引入的方式,然后重新require加载,这会引导composer通过从文件物理路径找到自定义composer库的位置,并复制到verndor,这样就相当于在本地业务代码中开发和调试自定义composer库,如果自定义composer库更新,业务再执行一次require即可
 
3、修改composer.json配置
使用版本管理创建composer私有库
 
4、重新加载自定义composer库的require语法 composer require "galaxy/handle:dev-develop"
 
5、发布:自定义composer库开发调试通过进行git提交和push,业务项目更新composer.json的引入方式为前文示例的git

六、疑问

1、有第三方依赖的私有库代码,是否有更好的开发方式?

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
tp5 composer 导入qrcode
tp5composer导入qrcode使用composer导入第三方模块是很爽的,久而不用又感觉找不到节奏,记录一下。基础环境:php5.3.2以上,composer,tp5composer安装:直接下载exe文件https://getcomposer.org/ComposerSetup.exe(https:
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Linux安装Composer
Composer是php的一个包管理器,使用Composer能极大的提高我们的代码效率。当我们需要使用优雅的laraverl框架时我们一定不能绕过Composer当然Composer不是只为laravel服务的,他是为整个php服务的。(Composer需要php5.3.2以上才能运行)1.下载Composer包curl
Stella981 Stella981
3年前
PHP 使用 VarDumper 进行优雅调试
使用截图!(https://oscimg.oschina.net/oscnet/fb45d260294466f3e22478ab161768db1b4.jpg)安装方法1.安装composer.//安装Composer,如果已经安装过,可不必再安装cur
Stella981 Stella981
3年前
Codeigniter composer 和 __autoload魔术方法冲突解决
_废话不多说了,直接看源代码把_CI首先加载的是system/core/Codeigniter.php阅读发现(165行):if($composer_autoloadconfig_item('composer_autoload')){if($composer_autoloadTRUE)
Stella981 Stella981
3年前
Composer使用
提示:不要忘了经常执行composerselfupdate以保持composer一直是最新版本哦!PHP版本必须是5.4已上版本phpv检测当前php版本linux安装:局部安装1\.进入到自己项目目录:如 cd/home/www/2\.要真正获取Composer,我们需要做两件事。首先安装Compose
Wesley13 Wesley13
3年前
ThinkPHP5.0 build 自动生成模块
提示:首先,下载的完整框架或者Composer运行创建命令生成的框架中,build.php文件默认存放于根目录下。需要复制build.php文件到application目录,并对该文件进行修改,举例如下:return//生成应用公共文件
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
ThinkPHP开发必备composer扩展包
本文假设读者有能力正常使用composer环境隔离dotenv真实世界的开发往往是这样,多个团队成员共同开发,线上线下的代码通过版本控制系统保持一致.但你无法保证也没理由要求所有机器上的应用配置一致.例如,要求所有成员使用相同的本地数据库用户名和密码是不合理的.线上线下使用相同的数据库配置更加不合理.我们有
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(