什么是satis
我們一般是從packagist獲取composer包的,但這些都是公開的。那如果我們想創建自己的私有庫呢,比如企業就會有這方便的需要,那我們就可以用satis來創建自己的私有庫。
Satis 是一個靜態的 composer 資源庫生成器。它像是一個超輕量級的、基于靜態文件的 packagist 版本。
你給它一個包含 composer.json 的存儲庫,定義好 VCS 和 資源庫。它會獲取所有你列出的包,并打印 packages.json 文件,作為 composer 類型的資源庫。
什么是主資源庫
搭建過satis的同學都知道,如果我們要引用它,需要在composer.json中加入對應的倉庫
"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是啥意思呢?附上官網的解釋
主資源庫的類型為?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'。
但返回了一串“include/all$e75fd28807530f173c649ebc19728a480208c415.json”是什么意思?我是要獲取composer包的元數據啊!關鍵在于includes
,官網給出了解釋
對于較大的資源庫,可以拆分 packages.json 為多個文件。includes 字段允許你引用這些額外的文件。
文件的 SHA-1 碼允許它被緩存,僅在 hash 值改變時重新請求。
composer看到返回的sha-1改變了,會發起第二次請求來獲取真正的元數據。抓包如下
可以看到,請求的路徑就是上次請求includes塊的key值,此時我們終于知道composer包的源地址在哪啦,撒花~
以上是我的個人理解,如有錯誤,歡迎指正~