隨着業務愈來愈複雜,有些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