咱們通常是從packagist獲取composer包的,但這些都是公開的。那若是咱們想建立本身的私有庫呢,好比企業就會有這方便的須要,那咱們就能夠用satis來建立本身的私有庫。php
Satis 是一個靜態的 composer 資源庫生成器。它像是一個超輕量級的、基於靜態文件的 packagist 版本。
你給它一個包含 composer.json 的存儲庫,定義好 VCS 和 資源庫。它會獲取全部你列出的包,並打印 packages.json 文件,做爲 composer 類型的資源庫。
搭建過satis的同窗都知道,若是咱們要引用它,須要在composer.json中加入對應的倉庫html
"repositories": { "satis": { "type": "composer", "url" : "http://satis.corp.anjuke.com" }, "aptf": { "type":"git", "url":"git@gitlab.corp.anjuke.com:maben01/aptf.git" } }
咱們能夠看到,satis倉庫的類型爲composer,那類型爲composer是啥意思呢?附上官網的解釋git
主資源庫的類型爲composer
。它使用一個單一的packages.json
文件,包含了全部的資源包元數據。
這也是 packagist.org 所使用的資源類型。要引用一個composer
資源庫,只須要提供一個存放packages.json
文件的 目錄路徑。好比要引用packagist.org
下的/packages.json
,它的 URL 就應該是packagist.org
。而example.org/packages.json
的 URL 應該是example.org
。
咱們使用composer require xxx命令時,composer會依次查找composer.json中的repositories塊是否有指定的包。當看到類型爲composer
的statis地址時,composer其實是發起了一次http請求,能夠看到user-agent爲'composer/1.6.2'。
json
但返回了一串「include/all$e75fd28807530f173c649ebc19728a480208c415.json」是什麼意思?我是要獲取composer包的元數據啊!關鍵在於includes
,官網給出瞭解釋緩存
對於較大的資源庫,能夠拆分 packages.json 爲多個文件。includes 字段容許你引用這些額外的文件。
文件的 SHA-1 碼容許它被緩存,僅在 hash 值改變時從新請求。
composer看到返回的sha-1改變了,會發起第二次請求來獲取真正的元數據。抓包以下
composer
能夠看到,請求的路徑就是上次請求includes塊的key值,此時咱們終於知道composer包的源地址在哪啦,撒花~gitlab
以上是個人我的理解,若有錯誤,歡迎指正~ui