Composer 安装私有包
文章目录
【注意】最后更新于 March 26, 2020,文中内容可能已过时,请谨慎使用。
项目背景
我司一个项目这里简称:神居
,分为C
端(「代号:mooncake」),“平台端”「代号:internal」,B
端「代号:agent」,“任务端”「代号:script」,为了保护公司隐私,这里不方便介绍每个项目处理的业务,你只需要知道的是每个代号代表一个独立运行的项目,那么这些项目又如果做到代码的复用(Library/Model)呢,且需要做到每个项目可独立迭代更新。我们现采用的方式就是composer
管理私有包的方式。
这里也有一篇描述Composer
安装私有PHP软件包文章,以下我部分步骤翻译自这篇文章。
Composer
安装私有PHP软件包
使用Composer
安装私有PHP软件包。首先我们需要在composer.json
文件中进行一些额外的配置,然后设置SSH密钥。按照以下3个简单步骤进行操作
1. 指向Git仓库
更新composer.json并添加一个存储库:
|
|
这里url
,可以是gitlab
或者其他地址(可别犯傻)。
2.创建一个SSH密钥
在要安装软件包的计算机上创建一个SSH密钥,如果感觉自己既要配置gitlab
又要配置github
等等其他的SSH
秘钥,如何共存使用,可以参考我的这篇文章传送门。
如果您在开发机器上工作,则可能要将SSH密钥添加到GitHub / BitBucket / GitLab帐户。这样就可以访问您帐户有权访问的所有私有存储库。
将SSH密钥添加到GitHub帐户 将SSH密钥添加到BitBucket帐户 将SSH密钥添加到GitLab帐户
如果要配置部署服务器,则最好配置访问密钥或部署密钥。访问密钥仅提供对单个存储库的访问,因此可以进行更具体的访问管理。
将部署密钥添加到GitHub存储库 将访问密钥添加到BitBucket存储库 将部署密钥添加到GitLab存储库
你肯能会问,开发机器和部署服务器使用同样的SSH
秘钥不就完事了嘛,搞这么麻烦干啥,因为开发机器的秘钥对repo
拥有写的权限,而部署服务器只需拥有repo
的读权限即可了,还是建议共用的做法。
3.运行作曲家
现在只需composer require
或composer install
像往常一样打包。
这里值得提一下
composer require
指定版本时,会同时更新 composer.json 中对应的版本号,composer update
则不会
警告:向已知主机添加SSH指纹
首次在新主机名上使用SSH密钥时,它将显示如下警告:
|
|
这是额外的保护层,可防止您错误地连接到未知主机。但是,如果要使用SSH密钥自动执行任务,则确实会带来一些问题。
这就是为什么我们要手动触发此警告,并避免将来再次弹出它。可以使用以下命令完成此操作:
|
|
当然,您应该用repo
私有存储库的主机名替换掉git@github.com
。此命令将调用上面列出的警告。您可以使用GitHub / BitBucket / GitLab帐户中的指纹列表来验证指纹。
确认此警告后,SSH指纹将被添加到已知主机列表中,这将防止警告再次弹出。
案例分享
以mooncake
为例,一下是相关的composer.json
配置:
|
|
使用私有库的开发技巧
抛出问题:我们晓得私有库都有独立的repo
,还以mooncake
项目为例那我们在本地开发需要改动私有库lib
或model
下代码,那么改完后如何测试?私有库放哪里?是直接动手改vendor/neox/lib
,还是改独立目录下与mooncake
项目平级lib
库代码(假设我们将私有库lib
克隆到与mooncake
平级目录),如果改的是后者如何使其改过的代码生效呢?好了~不买官司了。接下分享一下我采用的方式:
方案一
私有仓库lib
和项目mooncake
平级(不是必须),配置composer
达到指定使用私有库lib
分支代码,修改代码以后需要把修改后的代码require
进vendor
目录下,我们可以composer.json
配置达到从本地指定私有lib
目录,将指定分支代码require
进vendor
,而不是从gitlab
下载。
缺点:每次改动私有的lib
库代码,都需要composer install
,还需先删除composer.lock
文件再install
。刚一开始我采用的这种方案,你会发现每次的install
,都要执行一堆没用的(效率太低,不推荐)。以下是这种方案我的composer.json
配置:
|
|
注意:实际
lib
和model
代码分支名是feature/20200323-db-rename-namespace
方案二
直接修改vendor
目录下的lib
或model
,修改前可以通过git
分支自行创建和切换分支以维护不同的代码,将此目录下的代码直接作为lib
和model
的本地开发仓库(其实本来也就是了)。这种方式改完代码及时生效无需执行composer
任何命令,因为vendor
下的代码包本来也就已经被处理好了autolaod
。此种方式也是我现在采用的方法,推荐。
最后贴一下,我司私有库的composer.json
配置图(因为隐私我做了部分模糊):
私有库Lib
:
私有库Model
:
最终被composer
处理后的psr-4
目录映射形式:
好文同享
文章作者 BING
上次更新 2020-03-26