什么是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包的源地址在哪啦,撒花~
以上是我的个人理解,如有错误,欢迎指正~