satis原理淺析

什麼是satis

咱們通常是從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'。
request 1json

但返回了一串「include/all$e75fd28807530f173c649ebc19728a480208c415.json」是什麼意思?我是要獲取composer包的元數據啊!關鍵在於includes,官網給出瞭解釋緩存

對於較大的資源庫,能夠拆分 packages.json 爲多個文件。includes 字段容許你引用這些額外的文件。
文件的 SHA-1 碼容許它被緩存,僅在 hash 值改變時從新請求。

composer看到返回的sha-1改變了,會發起第二次請求來獲取真正的元數據。抓包以下
request 2composer

能夠看到,請求的路徑就是上次請求includes塊的key值,此時咱們終於知道composer包的源地址在哪啦,撒花~gitlab

以上是個人我的理解,若有錯誤,歡迎指正~ui

相關文章
相關標籤/搜索