随着业务愈来愈复杂,有些service具备通用性,即Repo A中的某一service其余的几个Repo都会不一样程度的须要,若是能把该service做为一个独立的package,这样其余的Repo能够composer安装这个package,这会避免写多余和重复的代码。git
举个例子:假设一个产品有100个tables,后端API Repo的Model逻辑封装了不少CRUD逻辑,Model Event逻辑,Model Policy逻辑,Model Cache逻辑,Eloquent扩展逻辑,甚至包括字段加密逻辑等等。然后台管理Admin Repo也一样不一样程度的操做这100tables,定时做业Cron Repo也一样不一样程度的操做这100tables,它们都须要API Repo的Model代码。因此能够把Model代码抽离出来做为一个private package,有其余Repo须要能够composer安装这个private package。github
可使用Toran Proxy来作Composer Proxy,Toran Proxy也是composer做者开发的,可靠性也有保证。能够在Toran Proxy Download下载安装该服务,安装过程比较简单。如能够在AWS服务器上安装好Toran Proxy
后打开主页,按照提示设置下本地的composer配置文件~/.composer/config.json
,如我的在本地安装后须要在config.json
中按照提示的设置以下:json
{ "config": { "secure-http": false }, "repositories": [ { "type": "composer", "url": "http://toran.app:8888/repo/private/" }, { "type": "composer", "url": "http://toran.app:8888/repo/packagist/" }, { "packagist": false } ] }
这里"secure-http": false
设置为false是由于http://toran.app:8888/
是http协议而不是https协议,composer默认走的是https协议,这里仅供说明设置false,尽管应该按照默认的https协议。后端
而后在搭建的toran proxy中添加私有的package就行,这里第二个repo是存放在私有的Bitbucket Server上:api
总的来讲,就是在私有的服务器上搭建一个packagist镜像,把内部的一些service拆分打包成一些公用的package,这些package不适宜暴露,代码能够放在Bitbucket Server或Github Private Repository或Gitlab Server,composer安装这些private package时,会从私有代码仓库如Bitbucket Server中拉取代码并打包成zip包,存放在你安装的private packagist服务器上供下载安装;若是安装网络上public package如symfony/http-kernel时依然从github上拉取代码并打包成zip包存放在你的private packagist服务器上。这样会使得下次下载一样的package时速度会提升,这和平时经过packagist中国镜像下载public package时速度很快一样道理。服务器
无论怎样,总会遇到不少service不单单一个Repo须要的,这个具备公用性的service就能够作成一个private package放在公司内部搭建的private packagist镜像上,这也极大提升总体的开发效率。网络
没人愿意浪费时间去写重复的service的,这个工具能够帮助解决这个问题。app
RightCapital招聘Laravel DevOpscomposer